1. 程式人生 > >ActiveMQ(18):Message之延遲和定時消息投遞

ActiveMQ(18):Message之延遲和定時消息投遞

jms activemq 延遲和定時消息投遞

一、簡介

延遲和定時消息投遞(Delay and Schedule Message Delivery)

有時候我們不希望消息馬上被broker投遞出去,而是想要消息60秒以後發給消費者,或者我們想讓消息沒隔

一定時間投遞一次,一共投遞指定的次數。。。類似這種需求,ActiveMQ提供了一種broker端消息定時調度

機制。

註意:

我們只需要把幾個描述消息定時調度方式的參數作為屬性添加到消息,broker端的調度器就會按照我們想要的行為去處理消息。

當然需要在xml中配置schedulerSupport屬性為true

技術分享

二、說明

一共有4個屬性

1:AMQ_SCHEDULED_DELAY :延遲投遞的時間

2:AMQ_SCHEDULED_PERIOD :重復投遞的時間間隔

3:AMQ_SCHEDULED_REPEAT:重復投遞次數

4:AMQ_SCHEDULED_CRON:Cron表達式


ActiveMQ也提供了一個封裝的消息類型:org.apache.activemq.ScheduledMessage,可以使用這個類來輔助設置,

如:延遲60秒

MessageProducer producer = session.createProducer(destination);
TextMessage message = session.createTextMessage("test msg");
long time = 60 * 1000;
message.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_DELAY, time);
producer.send(message);

如:延遲30秒,投遞10次,間隔10秒:

TextMessage message = session.createTextMessage("test msg");
long delay = 30 * 1000;
long period = 10 * 1000;
int repeat = 9;
message.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_DELAY, delay);
message.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_PERIOD, period);
message.setIntProperty(ScheduledMessage.AMQ_SCHEDULED_REPEAT, repeat);

如:使用 CRON 表達式,每個小時發送一次

TextMessage message = session.createTextMessage("test msg");

message.setStringProperty(ScheduledMessage.AMQ_SCHEDULED_CRON, "0 * * * *");


CRON表達式的優先級高於另外三個參數,如果在設置了CRON的同時,也有repeat和period參數,則會在每次CRON執行的時

候,重復投遞repeat次,每次間隔為period。就是說設置是疊加的效果。

例如每小時都會發生消息被投遞10次,延遲1秒開始,每次間隔1秒:

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);

本文出自 “我愛大金子” 博客,請務必保留此出處http://1754966750.blog.51cto.com/7455444/1923564

ActiveMQ(18):Message之延遲和定時消息投遞