在Spring Boot中通过所有@ RabbitListener-s消耗RabbitMQ消息

时间:2018-12-11 21:59:36

标签: java spring spring-boot rabbitmq messaging

我正在配置一个示例,以检查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”方法决定由哪个进程处理?

1 个答案:

答案 0 :(得分:1)

其他侦听器不会处理您的消息,因为其中之一可以正确使用该消息。在receivemessage方法结束且没有错误之后,Rabbit侦听器会内部将您的消息标记为已处理。它不知道你的流程。因此,解决此问题的方法可能是在无法处理消息时抛出异常,但是它的处理方式很丑陋-处理消息的效率不是很高。

我发现这篇文章涵盖了这种架构 https://derickbailey.com/2015/07/22/airport-baggage-claims-selective-consumers-and-rabbitmq-anti-patterns/