【问题标题】:JMS deliver message at later timeJMS 稍后传递消息
【发布时间】:2016-02-23 04:21:19
【问题描述】:

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

  • WaitQueue -(此队列的过期队列设置为 SendQueue)
  • SendQueue - 这个有处理消息的消费者(默认这个有 expiryQueue 作为它的超时队列)
  • ExpiryQueue - 所有真正过期(非故意)的消息的默认 jboss 队列

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

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

【问题讨论】:

    标签: jboss jms hornetq


    【解决方案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

    【讨论】:

      猜你喜欢
      • 2011-02-26
      • 2011-01-29
      • 1970-01-01
      • 2019-07-18
      • 2012-01-05
      • 1970-01-01
      • 1970-01-01
      • 2014-02-02
      • 2014-09-27
      相关资源
      最近更新 更多