Как добавить дополнительный прослушиватель для прослушивания очереди с Spring AMQP?

1

В настоящее время у меня есть FooListener который слушает очередь, содержащую сообщения Foo. Как добавить еще BarListener класс BarListener для прослушивания одной очереди для сообщений Bar?

Мой RabbitMQ в настоящее время настроен следующим образом:

@Configuration
public class RabbitMQConfig {
    @Bean
    public MessageListenerContainer messageListenerContainer() {
        SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
        container.setConnectionFactory(connectionFactory);
        container.setQueues(workQueue());
        container.setMessageListener(new MessageListenerAdapter(fooListener(), new JsonMessageConverter()));
        container.setDefaultRequeueRejected(false);
        return container;
    }
}
Теги:
spring
spring-amqp
rabbitmq

2 ответа

2
Лучший ответ

В настоящее время нет встроенной поддержки для маршрутизации к различным слушателям в соответствии с типом полезной нагрузки.

Вы можете написать простую оболочку слушателя...

public void handleMessage(Object payload) {
    if (payload instanceof Foo) {
        this.fooListener.handleMessage((Foo) payload);
    }
    else if (payload instanceof Bar) {
        this.barListener.handleMessage((Bar) payload);
    }
    else {
        // unexpected payload type
    }
}

РЕДАКТИРОВАТЬ:

Spring AMQP 1.5 (в настоящее время на этапе 1 - 1.5.0.M1) теперь поддерживает эту функцию; посмотреть, что нового и объявить в блоге.

  • 1
    ... или использовать Spring Integration
  • 0
    Я принимаю это, поскольку нет встроенной поддержки.
Показать ещё 1 комментарий
1

Используйте ту же очередь для разных сообщений, я думаю, что это не самый лучший вариант.

У вас может быть один обмен с двумя ключами маршрутизации и разными связями с двумя очередями. Другой способ - использовать обертку, как говорит Гэри Расселл, но отливки не имеют хорошей производительности, и, кроме того, это решение не очень "принцип единой ответственности".

С уважением.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню