私はカフカからメッセージを取得し、ターゲットシステムを呼び出して従来のOracle DBを更新するアプリケーションを持っています。ターゲットシステムがダウンしたときにSpring Cloud Stream @StreamListenerがリッスンするのを停止します
対象システムがダウンしている場合、メッセージをKafkaバスに残し、一定期間処理しないシナリオを有効にしたいと考えています。 Circuit-breaker Hystrixベースのソリューションを検討していましたが、Spring Cloud Streamにリスニングイベントを「停止」させる仕組みは見つかりませんでした。私が考えることができる唯一の他の選択肢は、サーキットブレーカが開いている場合、これらのメッセージをエラー/再処理のトピックに転送することですが、それは私のアンチパターンのように聞こえるでしょう。私はは、イベントを処理することからシステムを一時停止することができます、それはマイクロサービスアプリのパブ/サブの利点です。
どのようなヘルプもうまくいくでしょう。
素晴らしいアイデア!私はそれを試してみましょう。私が推測しているのは、コンテキスト全体を停止するとアプリケーション全体が停止するので、これは完全な機能を備えた回路ブレーカのソリューションではありませんが、それは良い出発点です。 – odedia
これは素晴らしい作品です。エラーの特定のしきい値に達すると、コンテキストを停止し、サーバーが起動しているかどうかをテストするための単純なwhileループに入ります(内部は30秒)。サーバーが起動すると、context.start()をもう一度呼び出すだけです。したがって、JMXやその他のものは必要ありません。このシナリオでは、プロセスは自己修復のようなものですが、すべてのメッセージはカフカに並んでいます。もちろん、pingメソッドではSpringの機能を使用することはできませんが、それは本当に簡単なので大丈夫です。再度、感謝します! – odedia