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

标签 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”方法处理它?

最佳答案

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

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

关于java - Spring Boot 中所有 @RabbitListener-s 使用 RabbitMQ 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53732966/

相关文章:

java - jsp中如何对从数据库获取的数据添加分页

java - 使用内部类强制转换代理 Java 类

java - SQLite 如果数据库中存在输入则跳过或覆盖现有的

java - 用图像和提示装饰 JTextField

java - Spring Rest 服务中的可选请求 header

java - 保存对象的 toString 值时出现 Stackoverflow 错误 - Java/Hibernate/Spring

Spring Data Rest自定义 Controller

java - 不使用 root 进行映射的 Spring Data REST 示例

java - 在专用 tomcat 上将 spring-boot 应用程序部署为 war 文件不起作用

java - 在 Spring Boot 应用程序中 bean 验证失败时没有得到正确的响应