Ich bin neu bei Spring AMQP. Ich habe eine Anwendung, die ein Produzent ist, der Nachrichten an die andere Anwendung sendet, die ein Verbraucher ist.So verwenden Sie Ack oder Nack im Frühjahr AMQP
Sobald der Verbraucher die Nachricht erhält, werden wir die Validierung der Daten durchführen.
Wenn die Daten korrekt sind, müssen wir ACK und Nachricht aus der Warteschlange entfernt werden. Wenn die Daten nicht korrekt sind, müssen wir die Daten NACK (Negative Acknowledge) senden, damit sie in RabbitMQ erneut eingereiht werden.
Ich kam in
**factory.setDefaultRequeueRejected(false);**
(Es wird die Nachricht überhaupt nicht requeue)
**factory.setDefaultRequeueRejected(true);**
(Es wird die Meldung requeue wenn Ausnahme auftritt)
Aber mein Fall werde ich die Meldung bestätigen basierend auf Validierung. Dann sollte es die Nachricht entfernen. Wenn NACK dann die Nachricht erneut anfordert.
ich in RabbitMQ Website
Die AMQP-Spezifikation definiert die basic.reject Methode, die Kunden ermöglicht individuelle abzulehnen, Nachrichten übermittelt, Anweisen der Broker entweder zu verwerfen oder requeue sie
gelesen haben How um das obige Szenario zu erreichen? Bitte gib mir ein paar Beispiele.
habe ich versucht, ein kleines Programm
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;
}));
Nachricht nicht für andere Ausnahme Warteschlangen erneut factory.setDefaultRequeueRejected (true)
09: 46: 38.854 ERROR [Stderr] (SimpleAsyncTaskExecutor -1) org.activiti.engine.ActivitiObjectNotFoundException: Keine Prozesse mit Schlüssel 'WF89012'
09: 46: 39.102 INFO [com.example.bip.rabbitmq.handler.ErrorQueueHandler] (SimpleAsyncTaskExecutor-1), empfangen von Error Queue: { ERROR = Konnte nicht begangen JPA Transaktion; verschachtelte Ausnahme ist javax.persistence.RollbackException: Transaktion als rollbackonly}
Dank für Erklärung. Ich habe ein Programm ausprobiert. Könnten Sie bitte den Fehler korrigieren? – Chandan
Es ist nicht sinnvoll, immer eine 'AmqpRejectAndDontRequeueException' aus dem Error-Handler zu werfen; Setzen Sie dafür einfach 'default RequeueRejected = false '. Verwenden Sie die Technik in [diese Antwort] (http://stackoverflow.com/questions/39509745/negative-acknowledgement-to-rabbitmq-queue-to-re-queue-the-message-using-spring/39511357#39511357) zu Wirf es nur für die 'XMLException' - dein Hörer muss es erneut werfen. –
Siehe die Bearbeitung meiner Antwort. –