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