activeMq延遲消息隊列


Long delay = 30 * 1000L;
jmsTemplate.send(type.getValue(),new MessageCreator() {
@Override
public Message createMessage(Session session) throws JMSException {
TextMessage message = session.createTextMessage();
message.setText(JSON.toJSONString(data));
message.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_DELAY, delay);
return message;
}
});
延時三秒發送消息

版本5.4的 ActiveMQ 具有內置於ActiveMQ消息代理中的可選持久調度程序。通過Xml配置中將broker schedulerSupport屬性設置為true 來啟用它ActiveMQ客戶端可以通過使用以下消息屬性來利用延遲傳遞:

檢查郵件屬性

message屬性scheduledJobId 保留供Job Scheduler使用。如果在發送之前設置了此屬性,則將立即發送消息而不安排該消息。此外,在收到預定的消息后,scheduledJobId 將在接收的消息上設置屬性,因此如果使用類似Camel Route的內容可能會記住這一點,這可能會在重新發送消息時自動復制屬性。

Property name type description
AMQ_SCHEDULED_DELAY long 消息在計划由代理傳遞之前等待的時間(以毫秒為單位)
AMQ_SCHEDULED_PERIOD long 在再次計划消息之前等待的開始時間之后等待的時間(以毫秒為單位)
AMQ_SCHEDULED_REPEAT int 重復安排郵件以進行傳遞的次數
AMQ_SCHEDULED_CRON String 使用Cron條目設置計划

為了實現Java JMS客戶端的連接 - 有一個接口,其中包含用於在org.apache.activemq.ScheduledMessage中進行調度的屬性名稱

例如,要在60秒內安排發送消息 - 您需要設置AMQ_SCHEDULED_DELAY屬性:

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

您可以將消息設置為等待初始延遲,重復傳遞10次,每次重新傳遞之間等待10秒:

MessageProducer producer = session.createProducer(destination); 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); producer.send(message); 

您還可以使用CRON來安排消息,例如,如果您希望每小時安排一條消息,則需要將CRON條目設置為 - 0 * * * *- 例如

MessageProducer producer = session.createProducer(destination); TextMessage message = session.createTextMessage("test msg"); message.setStringProperty(ScheduledMessage.AMQ_SCHEDULED_CRON, "0 * * * *"); producer.send(message); 

CRON調度優先於使用消息延遲 - 但是,如果使用CRON條目設置repeat和period,則ActiveMQ調度程序將在每次CRON條目觸發時安排消息的傳遞。用例子更容易解釋。假設您希望將消息傳遞10次,每條消息之間有一秒鍾的延遲 - 並且您希望每小時發生一次 - 您可以這樣做:

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

官方文檔:http://activemq.apache.org/delay-and-schedule-message-delivery.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM