[英]Spring Boot App not consuming queue messages
我有用于在服务之间进行异步通信的 Rabbit MQ 代理。 服务 A正在向队列发送消息。 我检查了队列,来自服务 A 的消息已经到达:
我正在尝试在服务 B中创建一个侦听器以使用服务 A 生成的消息。我如下验证以检查服务 B 是否与 RabbitMQ 连接并且它似乎已成功连接。
问题是服务 B 已成功启动,但它正在接收来自 Rabbit MQ 的消息。
下面是监听器的实现:
@Slf4j
@Component
public class EventListener {
public static final String QUEUE_NAME = "events";
@RabbitListener(
bindings = {
@QueueBinding(
value = @Queue(QUEUE_NAME),
exchange = @Exchange("exchange")
)
}
)
public void handleTaskPayload(@Payload String payload) {
System.out.println(payload);
}
}
我验证了 Rabbit MQ 中的队列和交换信息,它们是正确的。
一切都正常工作,服务 A 或服务 B 中没有抛出任何错误,这使得这个问题更难调试。
我试图从 RabbitMQ 的队列 getMessage 中检索消息,消息如下所示:
{"id":"1",:"name:"Test","created":null}
对于解决此问题的任何帮助或指导,我将不胜感激。
最好的问候,兰多。
聚苯乙烯
我创建了一个如下所示的新测试队列并发布了一些消息:
修改监听器代码如下,仍然无法触发监听器监听队列事件:
@Slf4j
@Component
public class RobotRunEventListener {
public static final String QUEUE_NAME = "test";
@RabbitListener(
bindings = {
@QueueBinding(
value = @Queue(QUEUE_NAME),
key = "test",
exchange = @Exchange("default")
)
}
)
public void handleTaskPayload(@Payload String payload) {
System.out.println(payload);
}
试试这个方法:
@RabbitListener(queues = "test")
public void receive(String in, @Headers Map<String, Object> headers) throws IOException {
}
问题是我正在处理的 spring 引导应用程序有一个@Conditional(Config.class)
阻止了下面 bean 的创建:
@Slf4j
@Conditional(Config.class)
@EnableRabbit
public class InternalRabbitBootstrapConfiguration {
@Bean
public RabbitListenerContainerFactory rabbitListenerContainerFactory(ConnectionFactory connectionFactory) {
SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
factory.setConnectionFactory(connectionFactory);
factory.setMaxConcurrentConsumers(5);
return factory;
}
...
这导致 spring 引导应用程序不监听 Rabbit MQ 事件。 Config.class 需要特定的配置文件才能使应用程序能够侦听 Rabbit MQ 事件。
public class DexiModeCondition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
String[] activeProfiles = context.getEnvironment().getActiveProfiles();
return activeProfiles[0].equalsIgnoreCase(mode);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.