В настоящее время я создаю пользовательскую библиотеку поверх проекта 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»? Или что-то еще?
Спасибо, это исправило мою проблему. Что касается адаптера, это произошло после некоторых неудачных попыток заставить прослушиватель сообщений работать. Но еще раз спасибо за головы. –