[英]RabbitMQ Messages not getting sent to dead letter after first time
我們已將隊列配置為將死信消息(特別是 nack'ed 消息)發送到死信交換,該交換按其原始主題將它們路由到各個死信隊列。 這一切都很好,當消息被拒絕時,它們被發送到正確的死信隊列。
當我們將這些消息從 dlq 鏟回正常隊列時,問題就來了,在那里它們再次被拒絕。 出於某種原因,第二次通過它們就消失了,而不是被送回死信交換。
我假設正在進行某種“循環消息路由”檢測,但找不到類似的東西。 第二次檢查消息會給出所有預期的標題,所以我不確定這樣的事情甚至可以基於什么。 任何關於下一步去哪里或兔子是否有這樣的東西的建議將不勝感激!
如果有需要,我們的消費者寫在python使用鼠兔庫進行通信。
假設您有以下隊列/交換:
global_exchange
- 你的主要交易所DLX
另一個專門針對死信的交易所queue
- 你在global_exchange
中的主隊列。 包含arguments=x-dead-letter-exchange: 'DLX'
queue.dlq
- 你在global_exchange
中的死信隊列test_message
routing_key 綁定到queue
和queue.dlq
最后,我假設您像這樣在queue.dlq
管理頁面上使用 shovel 插件,將消息從queue.dlq
移動到queue
中:
以下是當您將帶有test_message
作為routing_key
的消息發送到global_exchange
時路由的工作方式:
test_message
上的綁定進入queue
x-dead-letter-exchange
參數使用routing_key= test_message
將其發送到DLX
queue.dlq
綁定,該隊列接收消息當您使用那個特定的管理面板將消息推回queue
時,它使用默認交換。 這會更改路由鍵。 因此,第二次收到的消息有一個路由鍵,它等於您要放入的隊列的名稱。
由於您沒有配置x-dead-letter-routing-key
,因此消息對當前路由鍵是死信的:
如果未設置,將使用消息自己的路由鍵。
所以在鏟子的結果上,這是它的路由方式:
queue
中, routing_key = queue
DLX
with routing_key = queue
DLX
中的queue
,消息被丟棄有 2 個潛在的解決方法:
queue.dlq
到routing_key = queue
queue
上的x-dead-letter-routing-key
配置為始終發送到死信上的相同路由鍵,無論最初發送給它的消息是什么,並確保在DLX
中綁定到它
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.