JMS 稍后传递消息

JMS deliver message at later time

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

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

SendQueue 的统计数据显示 "Received messages" 增加,但当前消息保持为 0,因此它们到达但立即转发到最后一个 ExpiryQueue。

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

如果是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