Zuulは、SpringCloudマイクロサービスシステムでファイラーとルーター機能を提供します。これは、マイクロサービスの不可欠な部分です。ファイラーのデフォルトの実装に加えて、承認、現在の制限、セキュリティ検証などをカスタマイズすることもでき、ルーターはnginx逆プロキシを完全に置き換えることができます。 Zuulの例外処理は、senderrorfilterによって行われます。
申請プロセス中に、デフォルトの例外フィルターを使用するのにあまり友好的ではない2つの問題があることがわかりました。
1.サービス要求ルートがタイムアウトされているか、利用可能なノードがないかどうかを迅速に識別することは不可能です。エラーが発生した場合、ログのみを表示してスタックを介して見つけることができます。
2。 {code:500,msg:”xx error”}などのカスタム応答パッケージ形式と互換性がありません。
次に、例外処理をカスタマイズする方法、例外プロンプト情報のカスタマイズなどについて説明します。
まず、デフォルトのsenderrorfilterを無効にする必要があります。オフィシャルはスイッチ構成を提供しているため、直接構成できます。
zuul.senderrorfilter.post.disable = true
カスタムエラーフィルター、私はここであまり言いません、コードを投稿するだけです
public class errorfilterはzulfilterを拡張します{private static final string error_status_code_key = "error.status_code";プライベートロガーlog = loggerFactory.getLogger(errorfilter.class); public static final string default_err_msg = "システムがビジーです。後でもう一度やり直してください"。 @Override public String filterType(){return "post"; } @Override public int filterOrder(){return 0; } @Override public boolean sextfilter(){requestContext ctx = requestContext.getCurrentContext(); ctx.containskey(error_status_code_key); } @Override public object run(){requestContext ctx = requestContext.getCurrentContext(); try {httpservletrequest request = ctx.getRequest(); int statuscode =(integer)ctx.get(error_status_code_key); string message =(string)ctx.get( "error.message"); if(ctx.containskey( "error.exception")){throwable e =(exception)ctx.get( "error.exception");スロー可能なre = getoriginexception(e); if(java.net.connectexceptionのre instance){message = "Real Service Connectionが拒否されました"; log.warn( "uri:{}、error:{}"、request.getRequesturi()、re.getMessage()); } else if(re instanceof java.net.sockettimeoutexception){message = "real service timeout"; log.warn( "uri:{}、error:{}"、request.getRequesturi()、re.getMessage()); } else if(re Instanceof com.netflix.client.clientException){message = re.getMessage(); log.warn( "uri:{}、error:{}"、request.getRequesturi()、re.getMessage()); } else {log.warn( "フィルタリング中のエラー"、e); }} if(stringutils.isblank(message))message = default_err_msg; request.setattribute( "javax.servlet.error.status_code"、statuscode); request.setattribute( "javax.servlet.error.message"、message); webutils.responseoutjson(ctx.getResponse()、jsonutils.tojson(new wrapperresponse <>(statuscode、message))); } catch(Exception e){string error = "フィルタリング中のエラー[errorfilter]"; log.error(error、e); webutils.responseoutjson(ctx.getResponse()、jsonutils.tojson(new wrapperresponse <>(500、error))); } nullを返します。 }プライベートスロー可能なgetoriginexception(throwable e){e = e.getCause(); while(e.getCause()!= null){e = e.getCause(); } return e; }}最後に、カスタムエラーフィルターを登録します
@bean public errorfilter errorfilter(){return new errorfilter();}要約します
上記は、編集者が紹介したSpring Cloud Zuul Custom Custom Unified Expermentation Methodです。それがあなたに役立つことを願っています。ご質問がある場合は、メッセージを残してください。編集者は時間内に返信します。 wulin.comのウェブサイトへのご支援ありがとうございます!