Filter JMS选择器与单个队列

Filter JMS选择器与单个队列,filter,queue,jms,activemq,consumer,Filter,Queue,Jms,Activemq,Consumer,我有一个应用程序,它使用AMQ代理上队列中的消息。我可能需要此应用程序的多个实例(出于性能原因),在这种情况下,每个实例都应该使用来自队列的消息的子集。此子集应根据传入消息上“HeaderA”头的值进行选择 即 实例1使用HeaderA==x的消息 实例2使用HeaderA==Y的消息 等等 (注意:我知道这种设计不太好,如果所有实例都是等效的,并且可以使用任何消息,那就更好了,但由于外部原因,我只能使用这种设计) 我正在考虑两种方法 使用ApacheCamel在代理上路由消息,以便 为的每

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

  • 实例1使用HeaderA==x的消息
  • 实例2使用HeaderA==Y的消息
  • 等等
(注意:我知道这种设计不太好,如果所有实例都是等效的,并且可以使用任何消息,那就更好了,但由于外部原因,我只能使用这种设计)

我正在考虑两种方法

  • 使用ApacheCamel在代理上路由消息,以便 为的每个唯一值创建单独的队列(动态创建) “海德拉”。然后,每个实例动态订阅它所属的队列 对……感兴趣

  • 每个实例在同一队列上创建一个使用者,但使用JMS 选择器仅使用它感兴趣的消息


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

    我会选择选择器

    尽管理论上可以动态创建队列,但大多数(全部?)JMS提供程序(如ActiveMQ)并没有优化为可扩展到数千个队列。我要指出的是,这可能会奏效。只需检查您的设置是否在线程使用率或文件描述符使用率(或类似资源)方面没有增长

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

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