2015-04-09 3 views
3

В настоящее время я создаю пользовательскую библиотеку поверх проекта Spring AMQP. Я пришел к тому, что хочу реализовать прослушиватель сообщений, чтобы получать сообщение асинхронным. Прочитав далее в документации, как указано в проекте, я считаю, что довольно легко реализовать свой собственный прослушиватель сообщений. Просто реализуйте класс MessageListener и настройте его для запуска входящих сообщений.Spring AMQP: MessageListener не принимает сообщений

Так вот что я сделал:

public class ReceiveController implements MessageListener 
{ 
    @Override 
    public void onMessage(Message message) 
    { 
     System.out.println("Received a message!"); 
    } 
} 

Затем я настроил его так:

private SimpleMessageListenerContainer configureMessageListener() 
{ 
    SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(); 
    container.setConnectionFactory(connection); 
    container.setQueueNames("test.queue"); 
    container.setMessageListener(this); 
    return container; 
} 

Обе части кода расположены в том же классе под названием «ReceiveController».

Отсюда факт, что я не использую какой-либо контекст (аннотации или xml). Я не уверен, что это обязательно для проекта, поскольку я могу просто создавать экземпляры классов самостоятельно.

При выполнении какой-то код, который использует мою библиотеку

  • Потребитель клиент подключается к RabbitMQ брокера (и остается подключенным).
  • Клиент-производитель подключается к брокеру RabbitMQ, отправляет свое сообщение и отключается.
  • Когда я смотрю на очередь с помощью плагина управления, я вижу, что сообщение было помещено в очередь, но прослушиватель сообщений не запускался.

По какой-то причине потребитель не получает сообщений через его слушателя. Может ли это быть связано с тем, что очередь была создана с использованием обмена «amq.direct» и ключа маршрутизации «test.route»? Или что-то еще?

ответ

2

При конструировании контейнера вручную (вне контекста приложения Spring) необходимо вызвать afterPropertiesSet() и start().

Кроме того, если ваш слушатель реализует MessageListener или ChannelAwareMessageListener, вам не нужен адаптер.

+0

Спасибо, это исправило мою проблему. Что касается адаптера, это произошло после некоторых неудачных попыток заставить прослушиватель сообщений работать. Но еще раз спасибо за головы. –

Смежные вопросы