Rabbitmq 多个RabbitListener。一个没有';行不通
我的要求是监听两个队列并处理消息Rabbitmq 多个RabbitListener。一个没有';行不通,rabbitmq,spring-amqp,Rabbitmq,Spring Amqp,我的要求是监听两个队列并处理消息 @Configuration public class ClassOne { @RabbitListener(containerFactory = "listenerForIncomingMessages", queues = "IncomingMessage") public void getAmqpMessage(Message inMessage, Channel channel) throws Exception { } }
@Configuration
public class ClassOne {
@RabbitListener(containerFactory = "listenerForIncomingMessages", queues = "IncomingMessage")
public void getAmqpMessage(Message inMessage, Channel channel) throws Exception {
}
}
@Configuration
public class ClassTwo {
@RabbitListener(containerFactory = "listenerForMissedDeliveries", queues = "MissedDelivery")
public void getAmqpMessage(Message inMessage, Channel channel) throws Exception {
}
}
我已经创建了两个容器
@Bean("listenerForIncomingMessages")
public SimpleRabbitListenerContainerFactory listenerForIncomingMessages() {
SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
factory.setConnectionFactory(connectionFactory());
factory.setConcurrentConsumers(2);
factory.setMaxConcurrentConsumers(2);
factory.setAcknowledgeMode(AcknowledgeMode.MANUAL);
factory.setPrefetchCount(1);
return factory;
}
@Bean("listenerForMissedDeliveries")
public SimpleRabbitListenerContainerFactory listenerForMissedDeliveries() {
SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
factory.setConnectionFactory(connectionFactory());
factory.setConcurrentConsumers(2);
factory.setMaxConcurrentConsumers(2);
factory.setAcknowledgeMode(AcknowledgeMode.MANUAL);
factory.setPrefetchCount(1);
return factory;
}
我有两个@Configuration类来处理消息
@Configuration
public class ClassOne {
@RabbitListener(containerFactory = "listenerForIncomingMessages", queues = "IncomingMessage")
public void getAmqpMessage(Message inMessage, Channel channel) throws Exception {
}
}
@Configuration
public class ClassTwo {
@RabbitListener(containerFactory = "listenerForMissedDeliveries", queues = "MissedDelivery")
public void getAmqpMessage(Message inMessage, Channel channel) throws Exception {
}
}
ClassTwo的RabbitListener在服务器启动期间只工作一次。在这之后,它就不工作了——消息到达了队列,但它们是不工作的
没有消费
我做错了什么
任何让它工作的指针
谢谢,尽管您不需要两个工厂,因为它们的配置是相同的,但看起来一切都很好。打开调试日志以找出问题所在。@GaryRussell谢谢您的评论。我有两条未确认的信息,这就是问题的根源。现在一切都很好。因为我将有两个RabbitListener,SimpleRabbitListenerContainerFactory是好的还是应该切换到DirectMessageListenerContainerFactory。注意:我对运行时动态添加队列没有任何要求。请参阅以确定哪个容器最适合您的用例。