5.4版的activemq在activemq訊息**中內建了乙個可選的永續性排程程式。通過在「 xml配置」中將broker schedulersupport屬性設定為true 可以啟用此功能。activemq客戶端可以通過使用以下訊息屬性來利用延遲傳遞。
官網:修改activemq.xml,在broker節點上新增該屬性
配置之後,再重新啟動在頁面中會開啟 schedule(預定)介面
**測試
// ...
textmessage message = session.
createtextmessage
("我是乙個延時訊息");
// 必須要先在配置檔案中開啟,有關scheduledmessage列舉值的說明見下圖
// 延遲20s傳送
message.
setlongproperty
(scheduledmessage.amq_scheduled_delay,
20000);
messageproducer producer = session.
createproducer
(queue)
; producer.
send
(message)
;// ...
scheduledmessage列舉值的說明scheduledmessage列舉值的說明
傳送完成之後可以在 schedule 中看到預定的訊息,在等待20s後會新增到訊息佇列中
("我是乙個延時訊息");
// 必須要先在配置檔案中開啟,有關scheduledmessage列舉值的說明見下圖
// 延遲20s傳送
message.
setlongproperty
(scheduledmessage.amq_scheduled_delay,
20000);
// 間隔5s投一次
message.
setlongproperty
(scheduledmessage.amq_scheduled_period,
5000);
// 傳送五次,注意是:setintproperty
1,cron表示式的優先順序高於另外三個引數,如果在設定了cron的同時,也有repeat和period引數,則會在每次cron執行的時候,重複投遞repeat次,每次間隔為period。就是說設定是疊加的效果。例如每小時都會發生訊息被投遞10次,延遲1秒開始,每次間隔1秒
2,此處cron是unix系統中任務排程器,它使用乙個字串來表示乙個任務何時需要被執行。而不是quartz裡邊的那個cron表示式
相關**測試
messageproducer producer = session.
createproducer
(destination)
;textmessage message = session.
createtextmessage
("test msg");
message.
setstringproperty
(scheduledmessage.amq_scheduled_cron,
"0 * * * *");
producer.
send
(message);
messageproducer producer = session.
createproducer
(destination)
;textmessage message = session.
createtextmessage
("test msg");
message.
setstringproperty
(scheduledmessage.amq_scheduled_cron,
"0 * * * *");
message.
setlongproperty
(scheduledmessage.amq_scheduled_delay,
1000);
message.
setlongproperty
(scheduledmessage.amq_scheduled_period,
1000);
message.
setintproperty
(scheduledmessage.amq_scheduled_repeat,9)
;producer.
send
(message)
;
ActiveMQ的延遲和定時投遞
在介紹activemq的延遲和定時投遞之前,這裡我們先來回顧下在併發程式設計中介紹的堵塞佇列 二 delayqueue實現限時訂單,其中我們就提到了乙個執行場景,即網上購物下單未支付,等支付時間到了之後的處理,最簡單的方式肯定就是輪詢資料庫了,但是輪詢資料庫的話肯定有很多的缺點,如造成資料庫壓力過大...
ActiveMQ和RabbitMQ的區別解析
1.activemq apollomq 優點 老牌的訊息佇列,使用j a語言編寫。對jms支援最好,採用多執行緒併發,資源消耗比較大。如果你的主語言是j a,可以重點考慮。缺點 由於歷史悠久,歷史包袱較多,版本更新很緩慢。集群模式需要依賴zookeeper實現。最新架構的產品被命名為apollo,號...
訊息佇列的消費語義和投遞語義
所謂的消費語義,指的就是如下三種情況 其實類似還有乙個投遞語義 說句實在話,其實還是老問題,只是換了一種問法!ok,開始我們的正文 我們先做如下約定 我們先從投遞語義開始講起,因為要先把這個概念講明白了,才能講消費語義。恰巧,kafka實現了這三種語義,我們以kafka來說明。如何保證訊息最多投遞一...