JMS稍后会传递消息

时间:2015-11-20 15:49:14

标签: jboss jms hornetq

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

  • WaitQueue - (此帐号的到期队列设置为SendQueue)
  • SendQueue - 这个消费者负责处理消息(默认情况下,这个消息有expiryQueue作为其超时队列)
  • ExpiryQueue - 所有真正过期(非故意)邮件的默认jboss队列

在WaitQueue中插入一条消息,我的预期延迟为TimeToLive,在时间到期后,我希望看到SendQueue中的消息(以及消费者处理它们),但它保持为空,消息直接转到ExpiryQueue,任何想法有什么不对?

SendQueue的统计信息显示"收到的消息"增加,但当前消息保持为0,因此它们到达但会立即转发到最后的ExpiryQueue。

1 个答案:

答案 0 :(得分:1)

而不是使用更耗费资源的到期队列方法;您可以考虑在消息级别使用传递延迟。

如果是HornetQ,您可以设置属性_HQ_SCHED_DELIVERY。 https://docs.jboss.org/hornetq/2.3.0.Final/docs/user-manual/html/scheduled-messages.html


   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);

从JMS2.0(JavaEE7)开始,也可以在MessageProducer上设置此属性。见https://github.com/jboss/jboss-jms-api_spec/blob/master/src/main/java/javax/jms/MessageProducer.java#L285