ActiveMQ可以通过配置消息Time To Live实现延迟队列。
具体步骤为:
- 在生产者发送消息时,设置消息的过期时间(Time To Live):
message.setLongProperty("AMQ_SCHEDULED_DELIVERY",System.currentTimeMillis()+delayTime);
producer.send(message);
这里设置了AMQ_SCHEDULED_DELIVERY
属性,表示延迟delayTime毫秒后再投递此消息。
- 在消费者端,配置选择器仅消费过期的消息:
MessageConsumer consumer =session.
createConsumer(queue, "AMQ_SCHEDULED_DELIVERY<=?0",System.currentTimeMillis());
这里只拿到延迟超时(Time To Live到期)的消息。
- 在Broker端,配置延迟投递策略:
<policyEntry queue=">" >
<delayedDeliveryPolicy >
<time-to-live-expiry-policy/>
</delayedDeliveryPolicy>
</policyEntry>
让Broker按过期时间(Time To Live)投递消息。这时生产者可以按需产生延迟消息,Broker会在指定时间投递给消费者。实现了基本的ActiveMQ延迟队列功能。
延时队列的关键是:
- 设置消息Time To Live
- 配置消费者的时间选择器
- Broker按过期时间投递
总的来说,主要包括:
- 在Producer端设置Time To Live属性
- 在Consumer端配置时间选择器,仅取过期消息
- 在Broker端设置按时投递策略
以上步骤构建了ActiveMQ的延迟机制。