ActiveMQ学习笔记(十)—— 延时与定时投递

ActiveMQ还支持消息的延迟投递和定时投递,这也是针对于消息生产者的。ActiveMQ为我们提供的 ScheduledMessage 类描述了延迟投递和定时投递的四种属性:

属性名 数据类型 描述
AMQ_SCHEDULED_DELAY long 延迟投递的时间,单位为毫秒
AMQ_SCHEDULED_PERIOD long 重复投递的时间间隔,单位为毫秒
AMQ_SCHEDULED_REPEAT int 重复投递的次数
AMQ_SCHEDULED_CRON String 使用CRON表达式设置定时投递规则

ActiveMQ默认是不支持延迟投递和定时投递的,需要我们更改activemq.xml配置文件,使其支持延迟投递和定时投递:给<broker>节点添加schedulerSuppoort属性,并将属性值置为true即可
 

<!-- 参考官网http://activemq.apache.org/delay-and-schedule-message-delivery.html -->
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}" schedulerSupport="true">
	...
</broker>
//省略部分代码……

TextMessage textMessage = session.createTextMessage("这是一个消息" + System.currentTimeMillis());

//延迟投递,消息到达mq服务器后,10秒后才会发给消费者
//textMessage.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_DELAY, 10000);

//重复投递次数,1次,注意是int类型
//textMessage.setIntProperty(ScheduledMessage.AMQ_SCHEDULED_REPEAT, 1); 
//重复投递间隔时间,5秒
//textMessage.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_PERIOD, 5000); 

//cron表达式,注意:cron是操作系统的表达式,第一个参数是分钟,现在设的是指每分钟发送一次
//cron表达式的优先级高于另外三个参数,如果在设置了cron的同时,也有repeat和period参数,则会在每次cron执行的时候,重复投递repeat次,每次间隔为period,就是说设置是叠加的效果
textMessage.setStringProperty(ScheduledMessage.AMQ_SCHEDULED_CRON, "* * * * *"); 

//这些调度任务可以单独使用,也可以一起使用
//注意:不管发送多少次,发送的内容是不会改变的,别看我这里是发送的时间戳,就以为每次的内容会变化

messageProducer.send(textMessage);

发布了64 篇原创文章 · 获赞 0 · 访问量 3199

猜你喜欢

转载自blog.csdn.net/q42368773/article/details/103445643