2017-07-13 9 views
0

次の構成とシナリオでは、maxAttemptsに達したときにはどうなりますか?消費者のmaxAttemptsに達した場合はどうなりますか?

スプリングクラウドカフカとストリーム結合し、以下の特性:

  • spring.cloud.stream.bindings.input.consumer.maxAttempts = 3
  • spring.cloud.stream.kafka.bindings.input .consumer.autoCommitOffset =真
  • spring.cloud.stream.kafka.bindings.input.consumer.autoCommitOnError = falseを
  • spring.cloud.stream.kafka.bindings.input.consumer.enableDlq = falseを

ここでのシナリオは次のとおり@StreamListener注釈を介し

  • 消費者は、従来の注釈付きメソッドから戻るまで、メッセージ・ペイロード
  • を受信し、消費者は、データベースがダウンしているデータベース
  • にメッセージを永続化しようとします実行時例外が@StreamListener注釈付きメソッドからスローされます

私が見ている動作は、maxAttemptsの制限に達するまでメッセージを再試行することです。その後、私はサービスを再開するまで何も起こりません。再起動すると、メッセージは再消費されます。

maxAttemptsに達した後にdbが再び利用可能になるとどうなりますか?サービスを再開するための唯一のオプションはありますか? maxAttemptsを無限に設定する方法はありますか?

私は、私は完全にあなたが誤ったメッセージを自動コミットしないように設定するので、実際に予想される動作である行動

答えて

1

を理解していないよと思います。これは、クライアントが最後にコミットしたオフセットから再生する機会を与えます。

maxAttemptsを無限に設定する問題は、回復不能なエラーが発生した場合にリスナーがメッセージを何度も繰り返し消費することになります。

これらのメッセージのdlqを設定し、PollableChannelを使用してメッセージを定期的にポーリングして再処理しようとすると、外部リソースが復旧するまでに時間がかかることがあります。

関連する問題