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

猜你喜欢

转载自www.cnblogs.com/2661314cn/p/10794831.html