PHP如何通過rabbitMQ死信佇列實現業務的延時/定時操作
阿新 • • 發佈:2020-10-10
前言:
之前也通過文章介紹過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. 最後對死信佇列的訊息用程式碼進行消費了,表示已經過期的資料。