2016-01-02 52 views
2

我有一個簡單的服務,訂閱來自RabbitMQ的消息並將它們寫入數據存儲。有時候這個數據存儲在短時間內不可用(有時是秒,但有時是幾分鐘)。如果發生這種情況,我們對失敗的消息執行basic.rejectrequeue設置爲true。雖然這起作用,但消息似乎立即被重新發送。我希望RabbitMQ優雅地補償重新交付。例如,首先嚐試在2,3,5,8,13秒之後重新遞送「立即」。這是可能的,如果是這樣的話,如何?RabbitMQ重新傳遞被拒絕的消息?

+2

您可以在http://globaldev.co.uk/2014/07/back-off-and-retry-with-rabbitmq/進行檢查。基本上這個想法是爲每條消息設置一個ttl! –

+0

@LouisF。你在這裏刪除了你的帖子http://stackoverflow.com/q/35399063/4828463爲什麼? –

回答

2

除了什麼路易斯F.發佈的評論,退房延遲的消息交換插件https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/

你可以建立一個死信交換使用延遲的消息交換類型,有這很容易實現而不必做一堆配置並使用這樣的TTL。

+0

感謝您的看起來,這比我使用的DLX + TTL攻擊更清潔。 –

相關問題