Spring Boot ActiveMQ 延迟消息投递

概述

有时候我们不希望消息马上被broker投递出去,而是想要消息1秒以后发给消费者,或者我们想让消息没隔一定时间投递一次,一共投递指定的次数。。。类似这种需求,ActiveMQ提供了一种broker端消息定时调度机制。

ActiveMQ启用延时投递

首先要修改activemq.xml配置文件schedulerSupport="true",启用延时投递

1
2
<broker xmlns="http://activemq.apache.org/schema/core" ... schedulerSupport="true" >
</broker>

发送消息

需要在实例类中,增加Completion属性,用于存储关键词。

1
2
3
4
5
6
7
8
9
10
11
12
@Resource(name = "QueueUpdateOrder")
private Queue queueUpdateOrder;
@Autowired
private JmsTemplate jmsTemplate;

public void updateOrder(String orderId) {
jmsTemplate.send(queueUpdateOrder, session -> {
ObjectMessage objectMessage = session.createObjectMessage(orderId);
objectMessage.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_DELAY,1000L);
return objectMessage;
});
}

延时投递属性

属性类型描述
AMQ_SCHEDULED_DELAYlong延迟投递的时间
AMQ_SCHEDULED_PERIODlong重复投递时间间隔
AMQ_SCHEDULED_REPEATint重复投递次数
AMQ_SCHEDULED_CRONStringCron表达式
FallSea wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!
坚持原创技术分享,您的支持将鼓励我继续创作!