RabbitMQ實現延時佇列

2021-10-03 03:16:24 字數 856 閱讀 9739

rabbitmq實現延時佇列一般有兩種形式:

**第一種方式:**利用兩個特性: time to live(ttl),dead letter exchanges(dlx)[a訊息佇列過期–>傳送給b佇列]

**第二種方式:**利用rabbitmq的外掛程式x-delay-message

rabbitmq可以針對佇列設定x-expires(則佇列中所有的訊息都有相同的過期時間或者針對message設定x-message-tt(對訊息進行單獨設定,每條訊息ttl可以不同),來控制訊息的生存時間,如果超時(兩者同時設定以最先到期的為準),則訊息變為dead letter(死信))

dead letter exchanges(dlx)

rabbitmq的queue可以配置x-dead-letter-exchange和x-dead-letter-routing-key(可選)兩個引數,如果佇列**現dead letter,則按照者兩個引數重新路由轉換到指定的佇列.

x-dead-letter-exchange:出現dead letter重新傳送訊息到指定exchange

x-dead-letter-routing-key: 出現dead letter之後將dead letter重新按照指定的routing-key傳送

實際應用:

/**

*延時佇列-->負責資料展示儲存

*/@bean

public queue deayseckillqueue()

基於 rabbitmq 實現的延時佇列

雖然 rabbitmq 沒有延時佇列的功能,但是稍微變動一下也是可以實現的 存在乙個倒計時機制 time to live ttl 當到達時間點的時候會觸發乙個傳送訊息的事件 dead letter exchanges dlx 基於第一點,我利用的是訊息存在過期時間這一特性,訊息一旦過期就會變成dea...

RabbitMQ延時佇列實現訂單關閉

配置virtual host虛擬主機 spring.rabbitmq.virtual host test order close ip位址 spring.rabbitmq.host 127.0 0.1 使用者名稱 密碼 spring.rabbitmq.username guest spring.ra...

mysql 延時佇列 rabbitmq 延時佇列

前言 某個產品 或者訂單,有個有效期 過了有效期要取消 方法一 寫個指令碼,用crontab 定時掃瞄 改變狀態 但是最低只能一分鐘 不適合 方法二 用swoole得毫秒定時器,每秒鐘去掃瞄表 明顯占用資源 mysql受不了 方法三 用rabbitmq延時佇列 一開始將其丟入mq 死信佇列,設定有效...