ActiveMQ 延迟消息与定时消息传递

使用场景:

    订单超时未处理

    消息定时发送业务

    延迟消息业务场景

ActiveMQ 延迟 & 定时消息发送(Delay and Schedule Message Delivery)使用:

客户端使用延迟消息必须遵照以下配置属性:

属性名称 类型 描述
AMQ_SCHEDULED_DELAY long 消息延迟时间单位:毫秒
AMQ_SCHEDULED_PERIOD long 消息发送周期单位时间:毫秒。如 5秒一次 配置 AMQ_SCHEDULED_PERIOD = 5*1000
AMQ_SCHEDULED_REPEAT int 消息重复发送次数
AMQ_SCHEDULED_CRON string 使用Cron 表达式 设置定时发送

 

使用例子一:好比延迟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秒

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 表示式定时发送消息

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

使用例子四:Cron 的优先级大于消息延迟,只要设置了Cron 表达式会优先执行Cron规则,以下:消息定时发送10次,每一个小时执行,延迟1秒以后发送。

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

说明:ActvieMQ 5.4版本内置可选持久化定时任务消息发送,可是必须设置schedulerSupport属性为True 即:<broker schedulerSupport="true">。

参考资料html

http://activemq.apache.org/delay-and-schedule-message-delivery.htmlapache

http://activemq.apache.org/schema/core/activemq-core-5.4.0-schema.htmlsession