排程訊息與一般訊息的不同之處在於,它們最快也要等到未來指定的某個時間才會被傳遞。
要實現這一點,必須在發送訊息之前,在訊息上設定一個特殊的屬性。
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 發送,方法是在發送之前,在核心訊息上設定相同的屬性。