私のサービスは DService で、サービス チェーンの 4 番目のリンクです。つまり、コール フローは、オンライン ユーザー -> AService -> BService -> CService -> DService -> EService です。
DService から EService を呼び出すと、HttpTimeoutException のような再試行可能な例外がスローされることがあります。私は通常、2 ~ 3 回再試行し、2 ~ 3 回再試行しても失敗した場合は例外をスローします。
私の質問は、私が CService にスローしている例外は、再試行可能または再試行不可である必要がありますか? 両方のオプションの長所と短所の私の評価を以下に見つけてください
DService から 再試行可能な例外をスローすることの短所 - DService が再試行可能な例外をスローした場合、同じ規則に従って、CService も DService を 2 ~ 3 回再試行し、CD の呼び出しごとに、D は E サービス呼び出しに対して 2 ~ 3 回再試行します。同様に、最終的に EService への呼び出しは、呼び出しチェーンを上るにつれて指数関数的に増加します。したがって、EService ネットワークが実際に長時間ダウンしていた場合、不要な呼び出しが多数発生していることになります。これは、チェーン内の各呼び出しにタイムアウトを設定することで軽減できますが、不要な数の呼び出しに対して十分な軽減策であるかどうかはまだわかりません.
DService から再試行可能な例外をスローすることの長所 - CService は、その後の再試行で正しい値が得られる可能性があるため (制限時間内に) しばらくしてから再試行します - 特にクライアントがバックエンド ジョブである場合、あきらめる前に指数関数的に長時間再試行できます。 . Un-Retriable 例外をスローすると、このオプションが取り除かれます
これについてあなたの意見や提案をお寄せください
ありがとう、ハリッシュ