RabbitMQ 死信/死信队列
一、RabbitMQ 死信/死信隊列
1、DLX
Dead Letter Exchange 的縮寫
DLX(Dead Letter Exchanges)死信交換,死信隊列本身也是一個普通的消息隊列,在創(chuàng)建隊列的時候,通過設置一些關鍵參數(shù),可以將一個普通的消息隊列設置為死信隊列,與其它消息隊列不同的是,其入棧的消息根據入棧時指定的過期時間/被拒絕/超出隊列長度被移除,依次被轉發(fā)到指定的消息隊列中進行二次處理。這樣說法比較拗口,其原理就是死信隊列內位于頂部的消息過期時,該消息將被馬上發(fā)送到另外一個訂閱者(消息隊列)中
2、什么是死信
消息被拒絕(basic.reject或basic.nack)并且requeue=false.
消息TTL過期
隊列達到最大長度(隊列滿了,無法再添加數(shù)據到mq中)
3、什么是死信交換機
在定義業(yè)務隊列的時候,要考慮指定一個死信交換機,死信交換機可以和任何一個普通的隊列進行綁定,然后在業(yè)務隊列出現(xiàn)死信的時候就會將數(shù)據發(fā)送到死信隊列。
4、什么是死信隊列
死信隊列實際上就是一個普通的隊列,只是這個隊列跟死信交換機進行了綁定,用來存放死信而已
如何使用死信交換機
定義業(yè)務(普通)隊列的時候指定參數(shù)
x-dead-letter-exchange: 用來設置死信后發(fā)送的交換機
x-dead-letter-routing-key:用來設置死信的routingKey
死信交換機圖解
生產者:
(1)生產者連接到RabbitMQ Broker,建立一個連接( Connection)開啟一個信道(Channel)
(2)生產者聲明一個交換器,并設置相關屬性,比如交換機類型、是否持久化等
(3)生產者聲明一個隊列井設置相關屬性,比如是否排他、是否持久化、是否自動刪除等
(4)生產者通過路由鍵將交換器和隊列綁定起來
(5)生產者發(fā)送消息至RabbitMQ Broker,其中包含路由鍵、交換器等信息。
(6)相應的交換器根據接收到的路由鍵查找相匹配的隊列。
(7)如果找到,則將從生產者發(fā)送過來的消息存入相應的隊列中。
(8)如果沒有找到,則根據生產者配置的屬性選擇丟棄還是回退給生產者
(9)關閉信道。
(10)關閉連接。
消費者:
(1)消費者連接到RabbitMQ Broker ,建立一個連接(Connection),開啟一個信道(Channel) 。
(2)消費者向RabbitMQ Broker 請求消費相應隊列中的消息,可能會設置相應的回調函數(shù),
(3)等待RabbitMQ Broker 回應并投遞相應隊列中的消息,消費者接收消息。
(4)消費者確認(ack) 接收到的消息。
(5)RabbitMQ 從隊列中刪除相應己經被確認的消息。
(6)關閉信道。
(7)關閉連接。
總結
以上是生活随笔為你收集整理的RabbitMQ 死信/死信队列的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 你必须知道的Dockerfile
- 下一篇: centos7 rabbitmq安装/配