java - JMSXGroupId 的 RabbitMQ 解决方法

标签 java spring rabbitmq spring-rabbit

我知道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/

相关文章:

java - Spring 安全 OAuth 1.0a : providing already existing tokens

spring - Kotlin - SpringApplicationBuilder 中的扩展运算符

python - 为什么使用 Celery 而不是 RabbitMQ?

eclipse - 在 Tomcat 上使用 Eclipse 使用 Rabbit MQ 消息

java - 适用于 Linux 的 Windows 子系统无法识别 JAVA_HOME 环境变量

java - AWT 仅绘制最后添加的 Canvas

java - BigInteger modInverse 不适用于检查为可逆的数字

java - 如何在 JPA 中映射复合主键,其中主键的一部分是外键

rabbitmq - celery+rabbitmq 空队列

java - 如何比较 SortedSet 的元素以查看两个集合中有多少元素匹配