【问题标题】:JMS Selector vs. Individual QueuesJMS 选择器与单个队列
【发布时间】:2016-01-28 02:53:03
【问题描述】:

我有一个应用程序使用我的 AMQ 代理上的队列中的消息。我可能需要这个应用程序的多个实例(出于性能原因),在这种情况下,每个实例都应该使用来自队列的消息的一个子集。该子集应根据传入消息中“HeaderA”标头的值进行选择。

  • 实例 1 使用 HeaderA == x 的消息
  • 实例 2 使用 HeaderA == Y 的消息

(注意:我知道这种设计不是很好,如果所有实例都等效并且可以使用任何消息会更好,但由于外部原因我受限于这种设计)

我正在考虑两种方法;

  1. 使用 Apache Camel 在代理上路由消息,以便 为每个唯一值创建一个单独的队列(动态创建) '标题A'。然后每个实例动态订阅它的队列 有兴趣。

  2. 每个实例在同一个队列上创建一个消费者,但使用 JMS 选择器只使用它感兴趣的那些消息。

哪种方法会被认为是“最好的”,为什么?为唯一的标头值创建潜在的数千个单独的队列是否危险?使用 JMS 选择器有什么注意事项吗?

【问题讨论】:

    标签: filter queue jms activemq consumer


    【解决方案1】:

    我会选择选择器。

    尽管理论上您可以动态创建队列,但大多数(全部?)JMS 提供程序(例如 ActiveMQ)并未针对数千个队列进行扩展。我应该指出,它可能会起作用。只需检查您的设置没有增加线程使用或文件描述符使用(或类似资源)。

    使用 JMS 选择器没有什么大问题。一个潜在的问题可能是选择器中的 type-o 可能会消耗太多消息或根本没有消息而不指示错误。一如既往,需要进行广泛的系统测试。

    另外一件事——ActiveMQ 管理控制台和 Hawt.io 等管理工具并不是为支持大量队列而构建的。如果您打算使用它们,请考虑不要使用比需要更多的队列。

    【讨论】:

      猜你喜欢
      • 2015-12-05
      • 2011-11-20
      • 2012-11-06
      • 2011-08-27
      • 1970-01-01
      • 2011-07-31
      • 1970-01-01
      • 2016-05-24
      • 2018-03-30
      相关资源
      最近更新 更多