ActiveMQ中的延遲投遞和定時投遞

2021-10-24 00:26:51 字數 3058 閱讀 2572

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來說明。如何保證訊息最多投遞一...