在 Spring Boot 中由所有 @RabbitListener-s 使用 RabbitMQ 消息

Consume RabbitMQ message by all @RabbitListener-s in Spring Boot

我正在配置一个示例来检查 RabbitMQ 是否可以解决我的问题,而我 运行 是个问题。

任务:我在网关后面有 3 台机器,其中只有一台具有处理消息所需的数据。我想通过条件检查来解决这个问题。

问题:我尝试配置一些侦听器来模拟这种情况,就好像几台机器在使用消息一样。

@RabbitListener(queues = "spring-boot")
public void receiveMessage1(String message) {
    if(canProcess()){
        System.out.println("Received 1 <" + message + ">");
    }
}

@RabbitListener(queues = "spring-boot")
public void receiveMessage2(String message) {
    if(canProcess()){
        System.out.println("Received 2 <" + message + ">");
    }
}

但是,只有一个随机侦听器处理消息。其他人就是不明白。我有一种方法让所有听众都使用它,我自己决定哪个听众通过 "canProcess" 方法处理它?

其他听众不处理您的消息,因为其中一个听众正确地使用了它。在 receivemessage 方法没有错误地结束后,rabbit 侦听器在内部将您的消息标记为已处理。它不知道你的流程。因此,解决这个问题可能会在无法处理消息时抛出异常,但它的修复很丑陋——它处理消息的方式不是很有效。

我找到了这篇涵盖此类架构的文章 https://derickbailey.com/2015/07/22/airport-baggage-claims-selective-consumers-and-rabbitmq-anti-patterns/