[英]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.