Jboss JMS在稍后时间传递消息

Jboss JMS在稍后时间传递消息,jboss,jms,hornetq,Jboss,Jms,Hornetq,我试图在一段时间后传递JMS消息,我最初的想法是使用到期队列,并将消息放入没有任何使用者的队列中。因此,我有3个默认队列: WaitQueue-(此队列的到期队列设置为SendQueue) 发送队列-此队列具有处理消息的使用者(默认情况下,此队列将expiryQueue作为其超时队列) ExpiryQueue-所有真正过期的消息的默认jboss队列(并非有意) 在将消息插入WaitQueue时,我的预期延迟为TimeToLive,在时间到期后,我希望看到SendQueue中的消息(以及处理它

我试图在一段时间后传递JMS消息,我最初的想法是使用到期队列,并将消息放入没有任何使用者的队列中。因此,我有3个默认队列:

  • WaitQueue-(此队列的到期队列设置为SendQueue)
  • 发送队列-此队列具有处理消息的使用者(默认情况下,此队列将expiryQueue作为其超时队列)
  • ExpiryQueue-所有真正过期的消息的默认jboss队列(并非有意)
在将消息插入WaitQueue时,我的预期延迟为TimeToLive,在时间到期后,我希望看到SendQueue中的消息(以及处理它们的消费者),但是它保持为空,消息直接进入ExpireyQueue,你知道怎么了吗


SendQueue的统计数据显示,“接收到的消息”增加,但当前消息保持在0,因此它们到达后会立即转发到最后一个ExpiryQueue。

而不是使用资源密集型的ExpiryQueue方法;可以考虑在消息级别使用传递延迟。

对于HornetQ,您可以设置属性_HQ_SCHED_DELIVERY。

由于JMS2.0(JavaEE7),因此也可以在MessageProducer上设置此属性。看


   TextMessage message = session.createTextMessage("This is a scheduled message message which will be delivered in 5 sec.");
   message.setLongProperty("_HQ_SCHED_DELIVERY", System.currentTimeMillis() + 5000);
   producer.send(message);