计划消息与普通消息不同,它们不会立即发送,而是在指定的未来时间点或之后才会发送。
为了实现这一点,在发送消息之前,需要在消息上设置一个特殊的属性。
1. 计划发送属性
用于标识计划消息的属性名为 "_AMQ_SCHED_DELIVERY"
(或常量 Message.HDR_SCHEDULED_DELIVERY_TIME
)。
指定的值必须是一个正的 long
类型,表示消息必须发送的时间(以毫秒为单位)。以下是使用 JMS API 发送计划消息的示例。
TextMessage message = session.createTextMessage("This is a scheduled message message which will be delivered in 5 sec.");
message.setLongProperty("_AMQ_SCHED_DELIVERY", System.currentTimeMillis() + 5000);
producer.send(message);
...
// message will not be received immediately but 5 seconds later
TextMessage messageReceived = (TextMessage) consumer.receive();
计划消息也可以通过核心 API 发送,方法是在发送消息之前,在核心消息上设置相同的属性。