0
:Spring AMQPを使用している場合、RabbitMQチャンネルでbasicAckのIOExceptionを正しく処理する方法は?春AMQPを使用して、このようなメソッドを宣言した
@RabbitListener(..)
public void myMethod(@Header(AmqpHeaders.CHANNEL) Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) Long tag, ...)
やマニュアルを使用するにはどのように1が正常にACKをやったときにスローされる可能性がありIOException
に対処する必要があり、確認応答モード:
try {
channel.basicAck(tag, false);
} catch (IOException e) {
// What to do here?
}
がすべき例外は再スローされますか? 「basicAck」操作を再試行する必要がありますか?それを処理する適切な方法は何ですか?
「すべてをやり直す」と言うと、それは本質的に私がしたいことです。しかし、私は、ACKとNACKのどちらもRabbitMQに届かず、メッセージが "unack:ed"状態であり、アプリケーションが再起動されるまでSpringによって再度再調査されないことを心配しています。 – Johan
何らかの理由でチャネルが閉じられている可能性があります。この場合、メッセージは自動的に準備完了に戻り、再配信されます。 'try {close} ... 'を追加して確実にすることもできますが、それも失敗する可能性があります。あなたのメソッドはすでにいくつかの他の状態を更新している可能性があるので、重複した配信に対処する必要があります。 –