1、延遲佇列,可以通過rabbitmq自帶機制實現:ttl+死信佇列(通過設定訊息或者佇列的ttl,過期後進行訊息的投遞,從而達到delay的效果)。
但存在問題:
1)設定佇列ttl:同乙個佇列的所有訊息從入佇列到ttl的時間,過期後會投遞到相應死信交換機。這樣如果訊息的過期時間不盡相同,會建立n個不同ttl的佇列。
2)設定訊息ttl:雖然每個訊息的ttl不同,但是投遞到相同佇列,佇列的先進先出原則,可能排在後邊的訊息早就過期了。
2、外掛程式: rabbitmq_delayed_message_exchange(好像3.5.7版本以上支援)
原理:將訊息傳送到延遲交換機中,訊息達到自己的延遲時間,則會被投遞到相應佇列。
使用:mq安裝外掛程式rabbitmq-plugins.bat enable rabbitmq_delayed_message_exchange
**層面:
1、配置:
@slf4j
@configuration
publicclass
delayedconfig
@bean
public
exchange delayedexchange()
@bean
public
binding delayedbinding()
}
2、客戶端傳送
public
messageresult mq() );
return
new messageresult("儲存成功", null, "");
}
rabbitmq實現延遲佇列
延遲佇列應用場景 使用者生成訂單之後,需要過一段時間校驗訂單的支付狀態,如果訂單仍未支付則需要及時地關閉訂單。使用者註冊成功之後,需要過一段時間比如一周後校驗使用者的使用情況,如果發現使用者活躍度較低,則傳送郵件或者簡訊來提醒使用者使用。延遲重試。比如消費者從佇列裡消費訊息時失敗了,但是想要延遲一段...
RabbitMQ如何實現延遲佇列?
延遲佇列儲存的物件肯定是對應的延遲訊息,所謂 延遲訊息 是指當訊息被傳送以後,並不想讓消費者立即拿到訊息,而是等待指定時間後,消費者才拿到這個訊息進行消費。場景一 在訂單系統中,乙個使用者下單之後通常有30分鐘的時間進行支付,如果30分鐘之內沒有支付成功,那麼這個訂單將進行一場處理。這是就可以使用延...
使用RabbitMQ實現延遲佇列
在專案中 1.使用者確認乙個訂單,若30分鐘之類沒有支付,則需要取消訂單,若用定時任務去掃瞄訂單表,第一,定時任務時間如何定義,有存在漏掃的風險,第二,訂單表資料龐大,掃瞄表非常消耗效能,這時候該功能可以引入rabbitmq延遲佇列來做 2.某條活動通知在指定的一天推送給使用者,可以用延遲佇列 延遲...