1. 程式人生 > 實用技巧 >PHP如何通過rabbitMQ死信佇列實現業務的延時/定時操作

PHP如何通過rabbitMQ死信佇列實現業務的延時/定時操作

前言:

之前也通過文章介紹過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. 最後對死信佇列的訊息用程式碼進行消費了,表示已經過期的資料。