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