RabbitMq訊息中心_延遲傳送訊息
Rabbitmq延遲傳送訊息解決方案
一、 什麼是延遲佇列:
延遲佇列儲存的物件肯定是對應的延時訊息,所謂”延時訊息”是指當訊息被髮送以後,並不想讓消費者立即拿到訊息,而是等待指定時間後,消費者才拿到這個訊息進行消費。
二、 怎樣實現延遲訊息:
方案1:通過延遲訊息或延遲佇列或兩者都延遲(取時間較短的)的方式實現。
1):通過佇列延遲來實現(我在視覺化工具來實現):
流程1:
流程2:
1、建立交換器:(一個是延遲訊息的交換器(auditExchange),一個是延遲訊息重新找到的交換器(delExchage))
注意:這裡的delExchange是延遲佇列重新找到的交換器。這裡
2、建立延遲的佇列:
注意:
x-message-ttl=30000 設定延遲時間為30000ms.
x-max-length:最大積壓的訊息個數,可以根據自己的實際情況設定,超過限制訊息不會丟失,會立即轉向delayToExchange進行投遞.
x-dead-letter-exchange:設定為剛剛配置好的delayToExchange,訊息過期後會通過delayToExchange進行投遞
x-dead-letter-routing-key:是延遲佇列重新找到的
3、延遲佇列繫結:
注意:from exchange:設定的是延遲佇列的交換器.
routing key:設定的是繫結時的key.
4、延時佇列重新找到的交換器與queue繫結:
注意:from exchange:是延遲佇列重新找到的交換器。
routing key:是延遲佇列重新找到的key。
方案2:通過外掛來實現。在rabbitmq 3.5.7及以上的版本提供了一個外掛(rabbitmq-delayed-message-exchange)來實現延遲佇列功能。同時外掛依賴Erlang/OPT 18.0及以上。