1
我想處理不成功的消息,消費者從隊列中獲取並重新排隊它們。Nack並拒絕在RabbitMQ
想象我有這樣的情況:
P => | foo | bar | baz | => C
其中foo,酒吧和巴茲的消息。
如果消費者讀baz
但不順心的事我既可以使用basic.reject
或basic.nack
(https://www.rabbitmq.com/nack.html)。使用這兩個命令中的一個,我會傳遞參數來重發消息。
問題是消息在與之前相同的位置重新排隊,所以下一條消息將再次爲baz
。
我想重新排隊,但將其發送回隊列的開頭:
P => | baz | foo | bar | => C
我與我的應用程序的一些代碼行解決,但是,我不知道有沒有更好的解決方案存在可能使用直接使用RabbitMQ的一些功能。
是的,我讀了整個文檔昨天。這不是我正在尋找的,但顯然我尋找的東西不存在,死信隊列可以是一個很好的解決方法。 – xyzale
這裏的隊列(FIFO)的行爲與預期完全一致,因爲您正在使用手動確認模式,所以線程將等待直到獲得確認,因爲它無法處理,因此它會嘗試以循環方式放入相同的位置。另一方面,一次又一次地處理不良信息是沒有意義的。重試2-3次(spring-amqp有直接支持),如果仍然失敗,請將其重新分類,以便以後可以分析錯誤消息的格式並直接與客戶團隊聯繫。 – lambodar
可能是您可以將TTL添加到您的失敗消息並放入DLX,因此一旦它過期,它將自動移動到主隊列。 – lambodar