首页 文章

@RabbitListener用于多个类中的相同队列

提问于
浏览
1

我想知道在Spring AMQP中是否有可能从多个类中的同一队列接收消息,具体取决于有效负载类型 .

我知道在类中使用@RabbitListener注释然后将@RabbitHandler放在方法上,但我想在保留单个队列的同时将多个类中的消息处理的复杂性分开 .

目前正在使用的版本:Spring AMQP v2.0.3以及RabbitMQ .

1 回答

  • 2

    那么,它不是一个队列 . 这实际上是设计单个侦听器并根据 payload 类型分发到其方法的架构决策 .

    作为一种解决方法,我建议您将逻辑从单个 @RabbitListener 委托给那些业务服务:

    @RabbitListener(queues = "foo")
    public class MyListener {
    
        private final ServiceA serviceA;
    
        private final ServiceB serviceB;
    
        public MyListener(ServiceA serviceA, ServiceB serviceB) {
              this.serviceA = serviceA;
              this.serviceB = serviceB;
        }
    
    
        @RabbitHandler
        public void handleA(A a) {
             this.serviceA.handle(a);
        }
    
        @RabbitHandler
        public void handleB(B b) {
             this.serviceB.handle(b);
        }
    }
    

相关问题