ActiveMQ延迟队列如何进行配置?

ActiveMQ可以通过配置消息Time To Live实现延迟队列。
具体步骤为:

  1. 在生产者发送消息时,设置消息的过期时间(Time To Live):
message.setLongProperty("AMQ_SCHEDULED_DELIVERY",System.currentTimeMillis()+delayTime);

producer.send(message);

这里设置了AMQ_SCHEDULED_DELIVERY属性,表示延迟delayTime毫秒后再投递此消息。

  1. 在消费者端,配置选择器仅消费过期的消息:
MessageConsumer consumer =session. 
  createConsumer(queue, "AMQ_SCHEDULED_DELIVERY<=?0",System.currentTimeMillis());

这里只拿到延迟超时(Time To Live到期)的消息。

  1. 在Broker端,配置延迟投递策略:
<policyEntry queue=">" >
   <delayedDeliveryPolicy >  
     <time-to-live-expiry-policy/>        
   </delayedDeliveryPolicy>
</policyEntry>

让Broker按过期时间(Time To Live)投递消息。这时生产者可以按需产生延迟消息,Broker会在指定时间投递给消费者。实现了基本的ActiveMQ延迟队列功能。

延时队列的关键是:

  • 设置消息Time To Live
  • 配置消费者的时间选择器
  • Broker按过期时间投递

总的来说,主要包括:

  1. 在Producer端设置Time To Live属性
  2. 在Consumer端配置时间选择器,仅取过期消息
  3. 在Broker端设置按时投递策略

以上步骤构建了ActiveMQ的延迟机制。