我知道RabbitMQ不支持JMSXGroupId,并且来自link ,看来这个功能很快就会被合并到 RabbitMQ 中。是否有任何解决办法可以使用交换/队列/主题的组合来解决?这是我的用例。
假设我有 1 个生产者服务器和 2 个消费者服务器,其中多个消费者线程从队列中消费。生产者服务器创建一个网络、一个子网和多个端口。所有这些请求都被转换为 json/stomp 并放入队列中。现在我如何保证同一线程处理属于同一网络的所有这些请求。在 ActiveMQ 或 Artemis 中,我们可以将 JMSXGroupId 设置为网络名称,并确保消息由同一线程拾取/确保属于同一网络组的消息有顺序。我怎样才能在 RabbitMQ 中实现这一点?
第二部分,如果上述是可能的(我有点贪婪),是否也可以说,我启用了route_key并为网络/端口/子网或扇出创建不同的队列,并确保属于不同队列的消息按照基于消息组的顺序释放以供使用。
我发现客户端有使用 spring-integration here 的解决方法,但它在客户端而不是在rabbitmq-server本身。因此,我不确定它将如何确保HA(主动-主动模式)中的事务和原子性在同一个线程中处理。
最佳答案
好的,再次询问您的问题后,您在创建网络、子网和端口时似乎发布了不同的消息。所有这些都创建单独的消息并发布。现在看来您有多个消费者,因此一个消费者可能会消费创建网络的消息,而其他消费者可能会消费创建子网或端口的消息。
为了处理这种情况,您基本上将消息发布到交换器,然后交换器将消息路由到特定队列。
现在如果你有唯一的独立队列在消费者端订阅,你就可以解决上述问题。
Producer -> Exchange -> Queue1 -> Consumer1
Producer -> Exchange -> Queue2 -> Consumer2
关于java - JMSXGroupId 的 RabbitMQ 解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44065758/