rabbitmq 實現延時隊列的 方式

延遲隊列存儲的對象是對應的延遲消息,所謂"延遲消息"是指當消息被髮送以後,並不
想讓消費者立刻拿到消息,而是等待特定時間後,消費者才能拿到這個消息進行消費 。
延遲隊列的使用場景有很多,比如:
令在訂單系統中, 一個用戶下單之後通常有 3 0 分鐘的時間進行支付,如果 30 分鐘之內
沒有支付成功,那麼這個訂單將進行異常處理,這時就可以使用延遲隊列來處理這些
訂單了 。
~用戶希望通過手機遠程遙控家裏的智能設備在指定的時間進行工作。這時候就可以將
用戶指令發送到延遲隊列,當指令設定的時間到了再將指令推送到智能設備 。
 

在 AMQP 協議中,或者 RabbitMQ 本身沒有直接支持延遲隊列的功能,但是可以通過前面
所介紹的 DLX 和 TTL 模擬出延遲隊列的功能。
在圖 4-4 中,不僅展示的是死信隊列的用法,也是延遲隊列的用法,對於 queue.dlx 這個死
信隊列來說,同樣可以看作延遲隊列。假設一個應用中需要將每條消息都設置爲 10 秒的延遲,
生產者通過 exchange.normal 這個交換器將發送的消息存儲在 queue.normal 這個隊列中。消費者
訂閱的並非是 queue.normal 這個隊列,而是 queue.dlx 這個隊列 。當消息從 queue.normal 這個隊
列中過期之後被存入 queue.dlx 這個隊列中,消費者就恰巧消費到了延遲 10 秒的這條消息 。
在真實應用中,對於延遲隊列可以根據延遲時間的長短分爲多個等級,一般分爲 5 秒、 10
秒、 30 秒、 1 分鐘、 5 分鐘、 10 分鐘、 30 分鐘、 1 小時這幾個維度,當然也可以再細化一 下。
參考圖 4-5 ,爲了簡化說明,這裏只設置了 5 秒、 10 秒、 30 秒、 l 分鐘這四個等級。根據
應用需求的不同,生產者在發送消息的時候通過設置不同的路由鍵,以此將消息發送到與交換
器綁定的不同的隊列中。這裏隊列分別設置了過期時間爲 5 秒、 10 秒、 30 秒、 1 分鐘,同時也
分別配置了 DLX 和相應的死信隊列。當相應的消息過期時,就會轉存到相應的死信隊列(即延
遲隊列〉中,這樣消費者根據業務自身的情況,分別選擇不同延遲等級的延遲隊列進行消費 。
 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章