【问题标题】:Configure a JMS (ActiveMQ) queue so that it only contains the last message配置 JMS (ActiveMQ) 队列,使其仅包含最后一条消息
【发布时间】:2011-01-12 17:58:34
【问题描述】:

我们有一个石英进程来轮询 ActiveMQ JMS 队列。

我们知道我们每分钟可能会收到几条消息,希望仅以配置的一分钟或更长时间的轮询速率响应最新消息。

我们不需要处理之前的任何消息。

有没有办法配置队列来获得这种行为?

似乎一个主题能够通过订阅恢复策略使用计数 1 来执行此操作。我们希望使用队列来执行此操作,以保证(或多或少)单次传递消息。

或者我们的假设是否存在概念上的缺陷...

谢谢

【问题讨论】:

  • 这并不是 JMS 的真正用例。听起来您需要一个数据库...
  • 在 WebSphere MQ 中,这很容易。将保留的发布作为持久消息发布。该主题始终包含最新的主题,并且已在两个位置固定到磁盘。 Active MQ 是否有类似于 WMQ 的保留 pubs 的东西?如果没有,您的商店中是否有可以利用的 WMQ?

标签: jms activemq


【解决方案1】:

在我看来,这没有标准的操作,所以你将不得不编写一些代码......

一种可能的解决方案是将 QueueBrowserQueueReceiver 一起使用:

通过QueueReceiver,您将获得队列中消息的枚举。对于每条消息,您现在可以在 JMSMessageID 上使用 MessageSelector 执行接收,只要 hasMoreElements() 返回 true。最后一条消息将是您想要的消息....

【讨论】:

    【解决方案2】:

    使用activemq时,可以对topic使用“图片缓存”。其中一项设置是始终保持发送的最后一条消息..

    查看订阅恢复策略设置:

    http://activemq.apache.org/subscription-recovery-policy.html

    【讨论】:

      猜你喜欢
      • 2018-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-07
      • 1970-01-01
      • 2017-09-13
      • 2016-11-20
      相关资源
      最近更新 更多