RabbitMQ 延遲佇列實現

2022-05-05 13:15:13 字數 810 閱讀 7447

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

public

class

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.某條活動通知在指定的一天推送給使用者,可以用延遲佇列 延遲...