前言:
之前也通過文章介紹過rabbitMQ的搭建以及在PHP開發場景下的一些使用。這個主要從rabbitMQ的web控制台介紹死信隊列的操作,以及代碼層面的小應用等。關於死信的原理,rabbitMQ的特性等可以在其他文章中找到,這里就不詳細介紹了。
場景:
死信的場景主要是用於來實現延遲隊列,比如之前介紹的redis訂閱的過期事件。都是用於在未來某個時間段需要對某些數據進行操作(刪除/更新),就比如某些訂單創建成功后添加到一個隊列中。程序消費掉一部分已經支付過的訂單,而那些未支付狀態並且超過30分鍾(舉例的超時時間)就將其放入到延遲隊列進行批量處理。
死信隊列概述:
可以把死信隊列理解為過濾后的水池,前面的隊列就像負責接水的大水池,只有當大水池滿了或者過濾篩選過的水才會流入小水池。最后小水池的水再進行飲用或者使用。
流程:
1. 創建1個死信交換機(正常創建即可)和一個死信隊列(正常創建),二者通過路由鍵綁定。
2. 創建1個業務交換機, 創建一個業務隊列,隊列關聯一個死信交換機及與交換機綁定的一個死信隊列路由鍵。
3. 最后將業務交換機與業務隊列綁定。
4. 代碼只需要對生產消息到業務隊列,消費死信隊列的消息就可以。
步驟:
1. 通過搭建的地址xxx.xxx.xxx.xxx:15672進入rabbitMQ的web控制台,新建虛擬機並進入。
2. 新建死信交換機和死信隊列,如下的ex_dlx,queue_dlx。
3. 新建業務交換機,和業務隊列,隊列關聯死信交換機。
4. 用代碼生產一條消息,然后查看業務隊列是否有新消息。
5. 兩分鍾后(創建隊列時設置)查看死信隊列是否有消息進來,以下表示死信隊列已經有新消息。
6. 最后對死信隊列的消息用代碼進行消費了,表示已經過期的數據。