死信隊列和延遲隊列的使用?

死信消息:

1.消息被拒絕(Basic.Reject或Basic.Nack)而且設置 requeue 參數的值爲 false
2.消息過時了
3.隊列達到最大的長度spa

過時消息:3d

在 rabbitmq 中存在2種方可設置消息的過時時間blog

第一種經過隊列設置:在隊列申明的時候使用 x-message-ttl 參數,單位爲毫秒,這種設置後,該隊列中全部的消息都存在相同的過時時間rabbitmq

第二種經過對單個消息設置,是設置消息屬性的 expiration 參數的值,單位爲毫秒。那麼每條消息的過時時間都不同。隊列

若是同時使用這2種方法,那麼以過時時間小的那個數值爲準。當消息達到過時時間尚未被消費,那麼那個消息就成爲了一個 死信 消息。it

 

延時隊列:在rabbitmq中不存在延時隊列,可是咱們能夠經過設置消息的過時時間和死信隊列來模擬出延時隊列。消費者監聽死信交換器綁定的隊列,而不要監聽消息發送的隊列。io


有了以上的基礎知識,咱們完成如下需求:class

需求:用戶在系統中建立一個訂單,若是超過期間用戶沒有進行支付,那麼自動取消訂單。基礎

分析:queue

一、上面這個狀況,咱們就適合使用延時隊列來實現,那麼延時隊列如何建立
二、延時隊列能夠由 過時消息+死信隊列 來時間
三、過時消息經過隊列中設置 x-message-ttl 參數實現
四、死信隊列經過在隊列申明時,給隊列設置 x-dead-letter-exchange 參數,而後另外申明一個隊列綁定x-dead-letter-exchange對應的交換器。

相關文章
相關標籤/搜索