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。注意:我对运行时动态添加队列没有任何要求。请参阅以确定哪个容器最适合您的用例。