私のアプリからウサギブローカーへの最大再試行回数を設定しようとしています。 私はspring amqp rabbit最大コンシューマ接続の再試行
、再試行インターセプタ、@Bean
public RetryOperationsInterceptor retryOperationsInterceptor() {
return RetryInterceptorBuilder.stateless()
.maxAttempts(CommonConstants.MAX_AMQP_RETRIES)
.backOffOptions(500, 2.0, 3000)
.build();
}
、これがリスナーコンテナ、
container.setAdviceChain(new Advice[]{retryOperationsInterceptor()});
内部で使用されているが、しかし、再試行のカップルの後に、消費者が無限ループにもう一度接続を試みてい
2017-02-21 15:03:12.229 WARN 9292 --- [nsumerThread_92] o.s.a.r.l.SimpleMessageListenerContainer : Consumer raised exception, processing can restart if the connection factory supports it. Exception summary: org.springframework.amqp.AmqpConnectException: java.net.ConnectException: Connection refused: connect
2017-02-21 15:03:12.229 INFO 9292 --- [nsumerThread_92] o.s.a.r.l.SimpleMessageListenerContainer : Restarting Consumer: tags=[{}], channel=null, acknowledgeMode=AUTO local queue size=0
2017-02-21 15:03:13.245 WARN 9292 --- [nsumerThread_93] o.s.a.r.l.SimpleMessageListenerContainer : Consumer raised exception, processing can restart if the connection factory supports it. Exception summary: org.springframework.amqp.AmqpConnectException: java.net.ConnectException: Connection refused: connect
2017-02-21 15:03:13.245 INFO 9292 --- [nsumerThread_93] o.s.a.r.l.SimpleMessageListenerContainer : Restarting Consumer: tags=[{}], channel=null, acknowledgeMode=AUTO local queue size=0
2017-02-21 15:03:13.261 ERROR 9292 --- [nsumerThread_83] o.s.a.r.l.SimpleMessageListenerContainer : Failed to check/redeclare auto-delete queue(s).
MAX_RETRY#制限後にブローカへの接続が不足しているため、アプリケーションのエラーおよびエラーが発生します。ヘルプ
EDIT
ため
おかげで@のアルテム・ビランによって示唆されるように、私は失敗の数をカウントし、onApplicationEvent
このクラスではComponent
public class BrokerFailureEventListener implements ApplicationListener<ListenerContainerConsumerFailedEvent>
を使用して終了しました適切な処置をとってください。
プロデューサー側の場合は、少し異なるシナリオです。 @ artem-bilanで説明されているように、アプリケーションは問題を処理する必要があります。私はnetflix-hystrix
を使用して探査し、生産方法にfallback
メソッドを追加し、そのルートを使用します。もう一度ありがとう。
ok great Artem。私はリスナーを追加し、そこに失敗を数えて、アプリケーションを終了することができました。私はアプリをシャットダウンしない方法があるのだろうかと思っていましたが、AMQP処理を完全に停止しますか?つまり、すべてのコンシューマーまたはリスナーコンテナを停止することができますか?ありがとうございました – user3169330
それは大きな問題ではありません。適切なBeanをcxtから取り出し、 'stop()'を呼び出してください。 –
Artem、ありがとう、今、これはすべて消費者側ですが、rabbitTemplateを使用しているプロデューサでは何が起こりますか?再試行をやめたり、無限の試行を避けたい場合は? – user3169330