计划消息与普通消息不同,它们不会立即发送,而是在指定的未来时间点或之后才会发送。

为了实现这一点,在发送消息之前,需要在消息上设置一个特殊的属性。

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 发送,方法是在发送消息之前,在核心消息上设置相同的属性。

2. 例子

请参考 计划消息示例,该示例展示了如何使用 JMS 发送计划消息。