一つの問題、
実際の使用zuulでは、ルーティングアドレスが実際のエラーを遮蔽し、例外を投げ、zuulスローフィルターに達することができない問題を発見しました。
ソースコードが利用可能で読み取ることにより、Zuul ZuulException例外がスローされる、のRuntimeException内に封入されます。
インターセプタキャプチャを使用するのThrowable必要。
質問2、
上記のコードが由来する定義が場合Zuul外部要求処理、フィルタの各タイプの実行ロジックを処理することを実現する方法。私たちは、3つのコードから見ることができます順番に表すブロック、、、フィルタの呼び出しの3つの段階が、中に例外処理、我々は、彼らがすべてであることを確認できるフィルタ処理の種類(使用前にフィルターをまた)この機能を利用した処理均一な例外が定義され、処理されたフィルタのタイプ後から加えて、異常な相の外側、次いでするフィルタ処理されました。以下のためにケースを介して例外フィルタを投げ、それをされて使用する前に、プログラムの欠陥の根本原因の存在を引き継ぐためのフィルタのフィルタ処理した後、他のタイプ。com.netflix.zuul.http.ZuulServlet
service
try-catch
pre
route
post
catch
error
error
error
post
post
post
error
2つの従来の実装の方法を例外処理の種類、その中の非常にコア、一連の追加する要求時間例外処理の文脈において、これら2つの治療法ことリコールerror.*
パラメータを、これらのパラメータは、実際の作業をしているpost
段階SendErrorFilter
フィルタのパラメータは、クライアントへのコンテンツのバックを整理するために使用されます。post
例外をスロー相の場合error
、フィルタ処理後の呼び出していないpost
要求フェーズを、もちろん、これらerror.*
のパラメータはなくなりSendErrorFilter
、消費者の出力。私たちは、カスタム持っているのであれば、post
適切に例外を処理できないフィルタを、それはまだ可能性がログに表示することであり、要求に対する異常な応答が空の質問はありません。前に私たちは、修正することができます変更があり、この問題の存在を確認するために削除するには、有料の注意を、それが例外をスローすることができ、処理ブロックを。ThrowExceptionFilter
filterType
post
try-catch
上記課題を解決するために、このような最も直接的など、多くの人が私たちが達成することができますがありますerror
フィルタ結果が組織に直接返送された場合の効果を達成することができるようになりますが、そのような欠点は、情報組織とエラーコードについては、明白であることは、それを達成返さ複数のコピーが存在します、これは私たちの将来のコードの保守作業のために非常に困難です。したがって、一貫性のある例外復帰処理ロジックを維持するために、我々はまだ希望があることでしょうpost
スローフィルタできるようにするには例外SendErrorFilter
ハンドルに。
上記では、我々は達成しているErrorFilter
捕捉pre
、route
、post
フィルタスローされた例外、および組織error.*
要求のコンテキスト内のパラメータを。私たちの目標は従うことがあるのでSendErrorFilter
、これらerror.*
のパラメータは、まだ私たちに有用であり、我々はそれを作るためにフィルタを使用し続けることができるようにpost
、例外フィルタを投げるための時間整理し続けてerror.*
パラメータをが、ここでは、これらのことはできませんerror.*
に渡される前にパラメータをSendErrorFitler
フィルタそれは対処することです。だから、私たちがする必要がErrorFilter
後にフィルタを再定義するerror
フィルタの種類、それが実現するために来るようにSendErrorFilter
機能しますが、error
フィルタは、すべての異常な状況に対処する必要はありません、それだけでpost
例外が効果的なフィルタを投げました。上記の考えによれば、我々は、から継承するクラスを作成することができるSendErrorFilter
フィルタは、それが再利用することができrun
、以下のような方法を、次に種類、順序、および実行条件にそれを書き換え、元の論理の多重化を達成するために、具体的に実装します。
https://www.cnblogs.com/duanxz/p/7543040.html