@RabbitListener для одной и той же очереди в нескольких классах - PullRequest
0 голосов
/ 11 мая 2018

Мне было интересно, возможно ли в Spring AMQP получать сообщения из одной и той же очереди в нескольких классах в зависимости от типа полезной нагрузки.

Мне известно об использовании в классе аннотации @RabbitListener, а затем о методе @RabbitHandler, но я хотел бы разделить сложность обработки сообщений по нескольким классам, сохраняя при этом одну очередь.

Используемая версия: Spring AMQP v2.0.3 вместе с RabbitMQ.

1 Ответ

0 голосов
/ 11 мая 2018

Ну, это невозможно. То, как вы хотите, не будет очередью . Это действительно архитектурное решение: спроектировать одного слушателя и распространить его методы в соответствии с типом 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);
    }
}
...