Mule ActiveMQ:如何将同一组消息发送到一个使用者线程

Mule ActiveMQ:如何将同一组消息发送到一个使用者线程,mule,activemq,mulesoft,Mule,Activemq,Mulesoft,我们在项目中使用ActiveMQ,我们需要一组 属于一个组的邮件应由一个使用者使用 线 例如,我们有3条(M1、M2、M3)消息属于人员A,还有3条(M4、M5、M6)消息属于人员B 我们的要求是:所有属于个人A的消息都应该由 使用者线程1和属于人员B的所有消息都应由 消费者线程2 根据ActiveMQ文档和我们的理解,我们使用 ActiveMQ中的JMXGroupId概念。例如,我们将JMSXGroupId设置为 123用于属于个人A的所有消息(M1、M2、M3),而234用于所有 属于个人B

我们在项目中使用ActiveMQ,我们需要一组 属于一个组的邮件应由一个使用者使用 线

例如,我们有3条(M1、M2、M3)消息属于人员A,还有3条(M4、M5、M6)消息属于人员B

我们的要求是:所有属于个人A的消息都应该由 使用者线程1和属于人员B的所有消息都应由 消费者线程2

根据ActiveMQ文档和我们的理解,我们使用 ActiveMQ中的JMXGroupId概念。例如,我们将
JMSXGroupId
设置为
123
用于属于个人A的所有消息(M1、M2、M3),而
234
用于所有 属于个人B的消息(M4、M5、M6)


使用
JMXGroupId
在某些情况下,属于人员A和B(M1、M2、M3、M4、M5和M6)的所有消息都将发送到同一消费者线程1。但是在我们的需求中,它应该是两个不同的线程。

看起来这个主题已经在ActiveMQ用户邮件列表中了。这一讨论导致了问题的解决,似乎该问题的解决方案包括发送一条带有
JMSXGroupSeq
属性的消息,该属性的值为
-1
。如Jira所述:

既然组负载是使用者优先级的一部分,那么重新平衡的关键是使用负序列号属性定期终止组。message.setIntProperty(“JMSXGroupSeq”,-1)

不幸的是,此实现似乎存在一个问题,总结如下。这一问题在2010年末(即10年前的现在)被报道,此后似乎没有采取任何措施来解决它

因此,我认为您有三种不同的选择:

  • 自己解决问题。这是开源软件的最大好处之一——您可以修复bug并实现自己需要的功能,而无需等待任何其他人
  • 移动到已支持此功能的位置,如中所述。ActiveMQ Artemis是ActiveMQ的下一代代理,当达到足够的功能奇偶校验时,它将成为ActiveMQ 6。ActiveMQ Artemis支持与ActiveMQ 5.x相同的所有协议,因此您无需更改任何客户端
  • 放弃邮件分组,只需在消费者身上使用选择器即可。例如属于个人1的每条消息都可以有一个名为
    personIndex
    的属性,其值为
    1
    ,应该接收这些消息的消费者可以使用选择器,如
    personIndex=1
    ,然后属于个人2的每条消息都可以有一个名为
    personIndex
    的属性,其值为
    2
    并且应该接收这些消息的消费者可以使用类似于
    personIndex=2
    的选择器

  • 谢谢你的回复。我们早些时候曾想过实施方案3,但我们面临的挑战是,我们可能会收到各种与人相关的信息,因此,如果我需要设置索引,我可能需要使用一些巨大的数字,并且我需要创建许多入站连接器,每个连接器使用一个选择器过滤器在我的代码中,入站端点将成倍增加。我想这排除了选项3,因此选项1和2将成为潜在的解决方案。我的回答是否解决了您的问题?如果是,请将其标记为正确,以帮助将来可能有相同问题的其他用户。如果没有,请澄清没有解决的问题。谢谢