Spring AMQPの新機能です。私は消費者である他のアプリケーションにメッセージを送信するプロデューサであるアプリケーションを持っています。Spring AMQPでAckまたはNackを使用する方法
消費者がメッセージを受信すると、データの検証を行います。
データが適切であれば、ACKとメッセージをキューから削除する必要があります。 データが不適切な場合は、RabbitMQに再キューイングされるようにデータをNACK(Negative Acknowledge)する必要があります。
私は私がベースのメッセージを確認します
しかし、私の場合(例外が発生したときにそれがメッセージをキューに再登録されます)
**factory.setDefaultRequeueRejected(true);**
**factory.setDefaultRequeueRejected(false);**
に出くわしました検証時に次に、メッセージを削除する必要があります。 NACKがメッセージを再キューした場合。
私はAMQP仕様は、クライアントがそれらを破棄するか、それらを
方法をキューに再登録するか、ブローカーを指示する、メッセージを配信、個人を拒否することができますbasic.rejectメソッドを定義して
RabbitMQのウェブサイトで読んだことがあります上記のシナリオを達成するために?いくつかの例を教えてください。
Iは小さなプログラム
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 [標準エラー](SimpleAsyncTaskExecutor -1) org.activiti.engine.ActivitiObjectNotFoundException:キー 'WF89012'でデプロイされたプロセスがありません
09:46:39102 INFO [com.example.bip.rabbitmq.handler.ErrorQueueHandler] (SimpleAsyncTaskExecutor-1)エラー・キューから受信した:{ERROR = ないJPAトランザクションをコミットでした。ネストされた例外は javax.persistence.RollbackExceptionがある:rollbackOnly としてマークされたトランザクション}
感謝。私はいくつかのプログラムを試しました。間違いを是正していただけますか? – Chandan
エラーハンドラから常に 'AmqpRejectAndDontRequeueException'を投げるのは意味がありません。そのためには、 'default RequeueRejected = false'を設定するだけです。 [この回答](http://stackoverflow.com/questions/39509745/negative-acknowledgement-to-rabbitmq-queue-to-requeue-the-message-using-spring/39511357#39511357)のテクニックを使用して'XMLException'のためだけにそれをスローします - あなたのリスナーはそれを再スローする必要があります。 –
私の答えに編集を参照してください。 –