2012-12-21 101 views
1

我有服務器哪些發送消息到MQ。消息從隊列中刪除時工人答案:RabbitMQ:嘗試再次發送消息

channel.basic_ack(delivery_tag=method_frame.delivery_tag) 

但是當工作人員產生錯誤不回答關於交付不錯。 是否可以將此消息路由到其他工作人員,或者將此消息發送到隊列尾並稍後再試。 RabbitMQ是否具有設置超時消息的機制。當超時結束時,請嘗試再次發送給工作人員,還是需要自己執行?

回答

1

如果您的工作人員不確認消息,它不會從隊列中刪除,但是,如果工人和rabbit-mq之間的連接仍然存在,rabbit-mq無法知道消息不在工作中,那麼緩衝區。

有幾種方法可以解決這個問題,它主要取決於您的應用程序結構。

最簡單的方法是將預取設置爲1,並確保在出現問題時重置rabbitmq與工作人員之間的連接。

你也可以看看nacking your messages但是我不知道這是否會重發他們。

你也可以按照你的說法去做,併發送你進入另一個隊列或類似的東西的消息。但是要記住,如果你沒有確認你的消息,你最終會得到一個比你想象的更大的隊列,因爲兔子不會從隊列中移除項目,除非它們被佔用(實際上這取決於你的配置隊列)。

+0

感謝您的回答。我發送了json字符串,我想像TTL那樣添加參數。當消息不處理時,我添加一些時間標籤並將其返回隊列。它不是嗎? – Evgeniy

+0

這取決於,我不確定你在說什麼樣的TTL,是這樣的:http://www.rabbitmq.com/ttl.html?或者它只是您傳遞的JSON對象中的一個值? –

+0

我將關於elemnt的消息告訴了JSON,我在添加並檢查它之前處理消息中的數據 – Evgeniy

相關問題