feignはヒューズを使って直接溶断する.
プロジェクトにはヒューズを配置し、オープン後に直接fallbackを溶断し、下流サービスが利用可能なのに!!!各種のdebug、ソースコード、悪い資料を見て、解けません.debugはブロックを表示するだけです.
その後、私はまたfallback方法で手で異常RuntimeExceptionを投げました.ついにコンソールで異常情報を得て、あるフィルタに指しました.
異常箇所は以下の通りです.
その後、私はまたfallback方法で手で異常RuntimeExceptionを投げました.ついにコンソールで異常情報を得て、あるフィルタに指しました.
@Override
public String test() {
System.out.println(" ");
throw new RuntimeException();
}
このRuntimeExceptionを手作りで投げないと.異常は読み取れません.異常箇所は以下の通りです.
public class FeignRequestInterceptor implements RequestInterceptor {
/**
* ,
*
* @param template
*/
@Override
public void apply(RequestTemplate template) {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder
.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
Enumeration headerNames = request.getHeaderNames();
if (headerNames != null) {
while (headerNames.hasMoreElements()) {
String name = headerNames.nextElement();
String values = request.getHeader(name);
template.header(name, values);
}
}
}
}
このフィルタリングでは、feignのheaderを転送しましたが、requestの空のポインターがfallbackで手作業で投げられた異常を報告しました.コンソールは次のようにエラーを報告しました.Caused by: java.lang.NullPointerException
at com.chinamobile.bcsec.usercontroller.interceptor.FeignRequestInterceptor.apply(FeignRequestInterceptor.java:27)
at feign.SynchronousMethodHandler.targetRequest(SynchronousMethodHandler.java:163)
at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:89)
at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:77)
at feign.hystrix.HystrixInvocationHandler$1.run(HystrixInvocationHandler.java:107)
at com.netflix.hystrix.HystrixCommand$2.call(HystrixCommand.java:302)
at com.netflix.hystrix.HystrixCommand$2.call(HystrixCommand.java:298)
at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:46)
... 26 more
これでやっとこの異常による溶断と確定しました.Servlet Request Attributes atributes=(ServletRequest Attributes)Request Contact Holder.get Request Attributes()この強転は判断が必要です.再回転するかどうかは、次のギルドに空の指針が存在するリスクがあります.ヒューズは直接に溶断されます.何のヒントもありません.HttpServletRequest request=atributes.get Request()穴があって、たまたまfallbackの中で手動で運転を投げた時に異常があったら、システムはまったく異常な情報を報告しません.なぜですか?