ActiveMQ 的延迟投递与定时调度功能非常实用,开发者只需在消息生产阶段添加特定属性即可实现。前提是 Broker 已启用调度支持。
1. 启用调度支持
从 ActiveMQ 5.4 版本开始,Broker 内置了可选的持久化调度器。要在配置文件中启用它,需将 schedulerSupport 属性设置为 true:
<broker schedulerSupport="true" ...>
<!-- 其他配置 -->
</broker>
2. 核心消息属性
客户端可以通过设置以下消息属性来控制调度行为。为了方便 JMS 客户端使用,Apache 提供了 org.apache.activemq.ScheduledMessage 接口来定义这些属性名。
| 属性名称 | 类型 | 说明 |
|---|---|---|
AMQ_SCHEDULED_DELAY | long | 消息在 Broker 调度前等待的毫秒数 |
AMQ_SCHEDULED_PERIOD | long | 初始延迟后,再次调度消息的时间间隔(毫秒) |
AMQ_SCHEDULED_REPEAT | int | 重复调度的次数 |
AMQ_SCHEDULED_CRON | String | 使用 Cron 表达式设定调度规则 |
3. 代码示例
基础延迟投递
如果希望消息在 60 秒后投递,只需设置延迟时间:
MessageProducer producer = session.createProducer(destination);
TextMessage message = session.createTextMessage("test msg");
long time = 60 * 1000; // 60 秒
message.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_DELAY, time);
producer.send(message);

