簡體   English   中英

Apache Camel,RabbitMQ:在autodelete = true的交換上使用autodelete = false的隊列

[英]Apache Camel, RabbitMQ : Consuming a queue that is autodelete=false on an exchange that is autodelete=true

我在駱駝中設置了一個簡單的泵,使用以下uri從供應商的rabbitmq服務器中消耗:

rabbitmq://host:port/statusExchange?queue=myQueueName&username=un&password=pass&exchangeType=fanout&autoDelete=true&durable=false

(他們的交換設置為autodelete = true,durable = false)

運行此命令時,它會創建一個新隊列(myQueueName),該隊列也是autodelete = true durable = false。

我希望我的隊列是autodelete = false,因為我們在供應商系統和我的系統之間存在一些網絡不穩定性。

但是,如果我在uri中更改autodelete arg,則在運行代碼時會出現錯誤,該代碼可歸結為:

Caused by: com.rabbitmq.client.ShutdownSignalException: channel error; protocol method: #method<channel.close>(reply-code=406, reply-text=PRECONDITION_FAILED - inequivalent arg 'auto_delete' for exchange 'statusExchange' in vhost '/': received 'false' but current is 'true', class-id=40, method-id=10)

如果我進入管理工具並手動創建隊列,請將autodelete設置為false。 然后在uri中設置autoDelete = true我得到以下錯誤:

Caused by: com.rabbitmq.client.ShutdownSignalException: channel error; protocol method: #method<channel.close>(reply-code=406, reply-text=PRECONDITION_FAILED - inequivalent arg 'auto_delete' for queue 'myQueueName' in vhost '/': received 'true' but current is 'false', class-id=50, method-id=10)

這意味着autoDelete uri參數既適用於隊列又適用於交換,如果它們不一致,則您似乎是被綁定的。 我在兔子文檔中找不到任何暗示此配置出錯的內容,而管理工具讓我可以毫無問題地設置此配置。

但是在http://camel.apache.org/rabbitmq.html上找到的文檔中提到了exchangeArgsConfigurer和queueArgsConfigurer,這聽起來非常有前景。 但是沒有關於args可以傳遞的文檔以及采用何種格式。 我仔細閱讀了消息來源,這讓我陷入了一條死胡同。 (我要懇求一般的Java無知,我必須在這里和那里涉獵,但這不是我選擇的語言)

那么駱駝在兔子綠洲喝什么呢?

我在過去遇到了類似的問題,我找到的唯一解決方案是將消費者方面的隊列聲明為與生產者生成的隊列相同(相同),看看這個:

Amqp客戶端未連接到activemq服務器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM