Spring AMQP с RabbitMQ, получающим то же сообщение

У меня есть небольшое приложение для весенней загрузки rabbitmq:

@Bean
public SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory(ConnectionFactory connectionFactory)
{
    SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
    factory.setConnectionFactory(connectionFactory);
    factory.setAcknowledgeMode(AcknowledgeMode.AUTO);
    return factory;
}

Простое определение очереди:

@Bean
public Queue queue()
{
    return new Queue("queue");
}

И простой слушатель, который записывает сообщение:

@RabbitHandler
public void process(@Payload Message message)....

Я вижу, что одно и то же сообщение отправляется несколько раз, прежде чем оно будет удалено из очереди.

Как я могу изменить эту конфигурацию, чтобы сообщение было отправлено ровно один раз.


person Spring Monkey    schedule 28.08.2016    source источник


Ответы (1)


Если ваш слушатель выдает исключение, сообщение будет повторно поставлено в очередь и отправлено.

Его нельзя отправить несколько раз, иначе это невозможно.

Включите ведение журнала DEBUG, чтобы следить за потоком сообщений.

person Gary Russell    schedule 29.08.2016
comment
вот журналы: pastebin.com/dWJFk46X. Я включил уровень DEBUG и добавил кеш для значения полезной нагрузки, и я вижу, что такое же значение отправляется в службу. - person Spring Monkey; 30.08.2016
comment
Во всех случаях redelivered=false, так что это все дискретные сообщения; Они не одинаковы; возможно проблема на стороне отправителя? - person Gary Russell; 30.08.2016
comment
Вы были правы, у меня был цикл, в котором неоднократно отправлялось одно и то же сообщение. Потребовалось время, чтобы разобраться в петле. - person Spring Monkey; 02.09.2016