摘要:官方插件僅支持版本中支持。使用過程聲明消息交換機實現實現消息發送實現實現
官方插件僅支持>=3.6.x 版本中支持。
本文描述的消息延遲機制采用官方推薦的插件rabbitmq-delayed-message-exchange,如精通rabbitmq和編程,請自行查看官方文檔,描述更加詳盡:
github
Rabbitmq插件列表
安裝需要在集群每臺機器中安裝由于rabbitmq并未內置該插件,需要手動下載安裝。關于已安裝的插件通過rabbitmq-plugins list可查看.
3.6.x下載地址
3.7.x下載地址
加載后解壓,并將其拷貝至(使用Linux Debian/RPM部署)rabbitmq服務器目錄:/usr/lib/rabbitmq/plugins中(windows和其他系統<安裝目錄> abbitmq_server-versionplugins).
啟用插件需要在集群每臺機器中執行
通過rabbitmq-plugins list查看已安裝列表,如下:
... [ ] rabbitmq_delayed_message_exchange 20171215-3.6.x ...
使用命令rabbitmq-plugins enable rabbitmq_delayed_message_exchang啟用插件,輸出如下:
The following plugins have been enabled: rabbitmq_delayed_message_exchange
通過rabbitmq-plugins list查看已安裝列表,如下:
... [E*] rabbitmq_delayed_message_exchange 20171215-3.6.x ...機制
安裝插件后會生成新的Exchange類型x-delayed-message,該類型消息支持延遲投遞機制,接收到消息后并未立即將消息投遞至目標隊列中,而是存儲在mnesia(一個分布式數據系統)表中,檢測消息延遲時間,如達到可投遞時間時并將其通過x-delayed-type類型標記的交換機類型投遞至目標隊列。
Java使用過程 聲明x-delayed-message消息交換機rabbitmq java client實現
// ... elided code ... Mapargs = new HashMap (); args.put("x-delayed-type", "direct"); channel.exchangeDeclare("my-exchange", "x-delayed-message", true, false, args); // ... more code ...
spring rabbitmq template實現
// ... elided code ... Map消息發送args = new HashMap<>(); args.put("x-delayed-type", "direct"); Exchange exchange = new CustomExchange("test.exchange", "x-delayed-message", true, false, args); //admin = RabbitmqAdmin admin.declareExchange(exchange); //more code...
rabbitmq java client實現
// ... elided code ... byte[] messageBodyBytes = "delayed payload".getBytes("UTF-8"); Mapheaders = new HashMap (); headers.put("x-delay", 5000); AMQP.BasicProperties.Builder props = new AMQP.BasicProperties.Builder().headers(headers); channel.basicPublish("test.exchange", "test", props.build(), messageBodyBytes); // ... more code ...
spring rabbitmq template實現
MessageProperties properties = new MessageProperties(); properties.setHeader("x-delay", 1000); //template : RabbitmqTemplate template.convertAndSend("test.exchange", "test", new Message(body, properties));
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/68500.html
摘要:然而實際業務中還存在另外一種定時任務,它可能需要一些觸發條件才開始定時,比如編寫博文時候,設置小時之后發送。在消息監聽類中,對通道定義了,這里會對延遲消息做具體的邏輯。由于消息的消費是延遲的,從而變相實現了從消息發送那一刻起開始的定時任務。 應用場景 我們在使用一些開源調度系統(比如:elastic-job等)的時候,對于任務的執行時間通常都是有規律性的,可能是每隔半小時執行一次,或者...
摘要:問題定位因為不是所有的消息都出現了沒有延遲消息效果的因素,通過有問題的消息特征,大致猜測可能是延遲時間過長導致了消息延遲失敗。所以,我們在使用的延遲消息功能時候,必須注意它的延遲極限是毫秒。 之前在寫Spring Cloud Stream專題內容的時候,特地介紹了一下如何使用RabbitMQ的延遲消息來實現定時任務。最近正好因為開發碰到了使用過程中發現,延遲消息沒有效果,消息直接就被消...
摘要:另一種就是用中的位于包下,本質是由和實現的阻塞優先級隊列。表明了一條消息可在隊列中存活的最大時間。當某條消息被設置了或者當某條消息進入了設置了的隊列時,這條消息會在時間后死亡成為。 SpringBoot 是為了簡化 Spring 應用的創建、運行、調試、部署等一系列問題而誕生的產物,自動裝配的特性讓我們可以更好的關注業務本身而不是外部的XML配置,我們只需遵循規范,引入相關的依賴就可...
摘要:基礎組件架構設計基礎組件封裝設計迅速消息發送支持迅速消息發送模式,在一些日志收集統計分析等需求下可以保證高性能,高吞吐量。基礎組件封裝設計事務消息發送支持事務消息,且保障可靠性投遞,在金融行業單筆大金額操作時會有此類需求。 Rabbitmq基礎組件架構設計 基礎組件封裝設計 - 迅速消息發送支持迅速消息發送模式,在一些日志收集、統計分析等需求下可以保證高性能,高吞吐量。 基礎組件封...
閱讀 1218·2023-04-25 20:31
閱讀 3726·2021-10-14 09:42
閱讀 1496·2021-09-22 16:06
閱讀 2670·2021-09-10 10:50
閱讀 3533·2021-09-07 10:19
閱讀 1781·2019-08-30 15:53
閱讀 1178·2019-08-29 15:13
閱讀 2825·2019-08-29 13:20