Mule ActiveMQ:如何将同一组消息发送到一个使用者线程
我们在项目中使用ActiveMQ,我们需要一组 属于一个组的邮件应由一个使用者使用 线 例如,我们有3条(M1、M2、M3)消息属于人员A,还有3条(M4、M5、M6)消息属于人员B 我们的要求是:所有属于个人A的消息都应该由 使用者线程1和属于人员B的所有消息都应由 消费者线程2 根据ActiveMQ文档和我们的理解,我们使用 ActiveMQ中的JMXGroupId概念。例如,我们将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
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年前的现在)被报道,此后似乎没有采取任何措施来解决它
因此,我认为您有三种不同的选择:
personIndex
的属性,其值为1
,应该接收这些消息的消费者可以使用选择器,如personIndex=1
,然后属于个人2的每条消息都可以有一个名为personIndex
的属性,其值为2
并且应该接收这些消息的消费者可以使用类似于personIndex=2
的选择器谢谢你的回复。我们早些时候曾想过实施方案3,但我们面临的挑战是,我们可能会收到各种与人相关的信息,因此,如果我需要设置索引,我可能需要使用一些巨大的数字,并且我需要创建许多入站连接器,每个连接器使用一个选择器过滤器在我的代码中,入站端点将成倍增加。我想这排除了选项3,因此选项1和2将成为潜在的解决方案。我的回答是否解决了您的问题?如果是,请将其标记为正确,以帮助将来可能有相同问题的其他用户。如果没有,请澄清没有解决的问题。谢谢