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_DELAY long 延迟投递的时间
AMQ_SCHEDULED_PERIOD long 重复投递时间间隔
AMQ_SCHEDULED_REPEAT int 重复投递次数
AMQ_SCHEDULED_CRON String Cron表达式