java - Spring Boot 中所有 @RabbitListener-s 使用 RabbitMQ 消息
问题描述
我正在配置一个示例来检查 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/
推荐阅读
- jupyter-notebook - Jupyter notebook 不工作(无法识别代码)
- azure - VS 2019更新后运行azure函数时调试配置文件不存在错误
- angular - ng-select 多次重置 ngModel 数组
- sql-server - 使用基于外键的左连接仅检索一行
- sql - 连续存储 1 列或多列的历史记录
- swift - Swift:应用程序:openURL:未调用方法
- node.js - 无法在 nodejs API 中获取十进制值?
- owl - 如何从 RDF 图包含一个语句
- tensorflow - " AttributeError: 'str' 对象没有属性 'decode' "jupyter notebook 上的 maskrcnn 实现
- go - 在 Golang 中编辑 ZIP 存档