filter - JMS 选择器与单独队列

标签 filter queue jms activemq consumer

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

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

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

我正在考虑两种方法;

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

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

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

最佳答案

我会选择选择器。

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

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

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

关于filter - JMS 选择器与单独队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33389250/

相关文章:

javascript - 过滤对象数组中的 bool 值

javascript - AngularJS : filter with AJAX

javascript - 连续运行 jQuery 动画

java - 将大量排队数据写入文件时出现内存错误

apache-camel - 用于从 ActiveMQ Artemis 传输消息或向 ActiveMQ Artemis 传输消息的 SJMS2 与 JMS 组件

ios - 在 UICollectionView 中搜索和过滤单元格

java - 为什么 async-http-client 不限制我的请求?

java - JMS MQ实现不抛异常的重试逻辑

jms - JMS 中的 Multi-Tenancy

html - CSS 悬停不显示