2

Я новичок в RabbitMQ и пытаюсь следующий сценарийснова поставить сообщение в RabbitMQ с использованием Spring ampq

-> производитель посылает сообщение
-> потребитель получает сообщение
- Выполнить свою собственную логику

если логика не удается - снова поставить

-> снова поставить в сообщении, если потребитель терпит неудачу (машина идет вниз)

Я выполнил основную отправителя с использованием Spring rabbitTemplate

rabbitTemplate.convertAndSend(.....); 

и для потребителя я реализовал сообщение слушатель

public class CustomMessageListener implements MessageListener { 
@Override 
    public void onMessage(Message message) { 
     //** my own logic** 
    } 
} 

и добавить его в контейнер через пружину

<bean id="aListener" class="com.sample.CustomMessageListener" autowire="byName"/> 

<rabbit:listener-container id="myListenerContainer" connection-factory="connectionFactory" acknowledge="auto" prefetch="750" concurrency="5" > 
    <rabbit:listener ref="aListener" queues="reportQueue"/> 
</rabbit:listener-container> 

Он работает отлично до этой части.

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

ответ

4

С acknowledge="auto" сообщение не будет отображаться до тех пор, пока слушатель не выйдет из строя, поэтому нет ничего лишнего, что вам нужно сделать; если ваш слушатель выдает исключение или сбой сервера, сообщение останется в очереди.

+0

Спасибо за быстрый ответ. Есть ли свойство или способ игнорировать сообщение или отправить сообщение в очередь мертвой буквы после «n» количества попыток. (при условии, что n будет указано) – Pradeep

+0

Добавить «повторный перехватчик» в «цепочку консультаций» слушателя. Настройте перехватчик с помощью «RejectAndDontRequeueRecoverer», который будет вызываться при повторном запуске повторных попыток; сообщение будет отправлено в DLX/DLQ, если исходная очередь настроена так. В качестве альтернативы вы можете перепечатать непосредственно в другую очередь с дополнительной информацией (например, трассировкой стека исключения) с помощью 'RepublishMessageRecoverer'. Дополнительную информацию см. В [документации] (http://docs.spring.io/spring-amqp/docs/latest-ga/reference/html/amqp.html#async-listeners). –

+0

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