Я новичок в Spring AMQP. У меня есть приложение, которое является производителем, отправляющим сообщения другому приложению, являющемуся потребителем.Как использовать Ack или Nack весной AMQP
Как только потребитель получит сообщение, мы проверим достоверность данных.
Если данные правильные, у нас есть ACK, и сообщение должно быть удалено из очереди. Если данные являются неправильными, мы должны NACK (отрицательное подтверждение) данных, чтобы они были переупознаны в RabbitMQ.
я наткнулся
**factory.setDefaultRequeueRejected(false);**
(Он не будет снова поставить сообщение на всех)
**factory.setDefaultRequeueRejected(true);**
(Это будет снова поставить в сообщение, когда происходит исключение)
Но мой случай я признаю сообщение на основе при проверке. Затем он должен удалить сообщение. Если NACK затем запросит сообщение.
Я прочитал на веб-сайте RabbitMQ
AMQP спецификация определяет метод basic.reject, что позволяет клиентам отказаться от индивидуума, доставленные сообщения, инструктаж брокера либо отказаться от них или их снова поставить
Как для достижения вышеуказанного сценария? Пожалуйста, предоставьте мне несколько примеров.
Я попробовал небольшую программу
logger.info("Job Queue Handler::::::::::" + new Date());
try {
}catch(Exception e){
logger.info("Activity Object Not Found Exception so message should be Re-queued the Message::::::::::::::");
}
factory.setErrorHandler(new ConditionalRejectingErrorHandler(cause ->{
return cause instanceof XMLException;
}));
Сообщение не повторно очереди за исключением различного factory.setDefaultRequeueRejected (истинный)
09: 46: 38854 ERROR [STDERR] (SimpleAsyncTaskExecutor -1) org.activiti.engine.ActivitiObjectNotFoundException: никаких процессов, развернутых с ключом 'WF89012'
09: 46: 39102 ИНФО [com.example.bip.rabbitmq.handler.ErrorQueueHandler] (SimpleAsyncTaskExecutor-1) Получено из очереди ошибок: {ОШИБКА = Может не совершать JPA сделки; вложенное исключение javax.persistence.RollbackException: Сделка помечается как rollbackOnly}
Спасибо за объяснение. Я попробовал какую-то программу. Не могли бы вы исправить ошибку? – Chandan
Не имеет смысла всегда бросать 'AmqpRejectAndDontRequeueException' из обработчика ошибок; для этого просто установите 'default RequeueRejected = false'. Используйте технику в [этом ответе] (http://stackoverflow.com/questions/39509745/negative-acknowledgement-to-rabbitmq-queue-to-re-queue-the-message-using-spring/39511357#39511357), чтобы просто выбросьте его за «XMLException» - ваш слушатель должен повторно бросить его. –
См. Изменение в моем ответе. –