2011-12-11 72 views
6

我正在使用RabbitTemplate類寫入使用spring amqp的RabbitMQ隊列。我使用convertAndSend方法將消息發送到隊列。這在正常情況下運行良好,但如果隊列不存在,它似乎無聲無息地失敗。不會引發異常,也不會將錯誤/調試消息記錄到記錄器中。我如何知道我的消息是使用spring amqp成功發送的?

對於我來說,確保郵件傳遞的最佳方式是什麼?

下面是當前代碼正在執行的一個示例。

RabbitTemplate template = new RabbitTemplate(factory); 
template.setQueue(queueName); 
template.setRoutingKey(queueName); 
template.convertAndSend(message); 
+0

你確定沒有信息記錄?你是否曾經故意與經紀人進行單元測試? – artbristol

+0

如果代理關閉,我對沉默失敗不正確,如果代理關閉,確實會收到UnknownHostException。我已經更新了這個問題。也就是說,如果隊列不存在,我仍然不會收到任何異常或錯誤消息。 –

+0

你可以發佈你發送消息的代碼片段嗎? – artbristol

回答

2

對於RabbitMQ客戶端發送消息給未綁定隊列來接受消息的代理,這並不是錯誤。 RabbitMQ將默默地放棄它,客戶將不會更聰明。如果你沒有對消息感興趣的隊列,經紀人還沒有其他可用的選項。

這就是說,你可以讓RabbitMQ抱怨,如果消息最終會通過設置mandatory標誌而悄悄丟棄。我不知道Spring AMQP接口是否支持它,但它在RabbitMQ Java客戶端庫中肯定是可用的。

+0

謝謝,我會研究它。我明天會盡力去解決,現在我們很忙。 –

+0

我沒有看到任何設置強制標誌的方法。沒有一個我正在使用的spring-amqp對象似乎具有該設置。 –

+0

我認爲我的問題是該消息被視爲已交付,因爲它確實到達交易所。該消息只是從不路由到隊列,因爲它不存在。兔子中可能需要設置一些配置才能確保消息不會丟失。 –

1

您可以使用mandatory並啓用發佈商退貨(對於無法投遞的郵件)。

相關問題