开发联调阶段通过zuul网关给app提供接口。但调用接口时好时坏,有时抛出如下异常。
只知道是TIMEOUT,有一定的概率发生,但具体是哪里超时无法确定。也只能让接口调用者先不停的retry。
zuul超时 ? ribbon超时 ? hystrix超时 ?
搜索timeout配置项毫无发现
抛出的堆栈信息包含重要信息。
以下是一些调试的技巧。
打断点: 选择一个地方作为入口。
逐行跟踪: Step Over , Step Into , Force Step Into , Step Out ,Drop Frame , Return to Cursor , Resume Frame 。
这是了解一个软件(插件) 内部执行逻辑最好的方法。只有一步步调试下去,一定能找到到底是哪里出错了。
其余一些捷径。
点击包名即可进入到包内。
包内进行搜索 timeout。
最终在hystrix包内检索到 execution.isolation.thread.timeoutInMilliseconds 配置项,加上propertyPrefix ,完整的配置如下。
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=2000
归根到底还是对zuul,ribbon,hystrix 不了解 ,不了解每个组件的功效,不了解其基本配置,更不了解其工作原理。
zuul 主要使用其动态路由功能。
ribbon 主要使用其负载均衡和容错功能。
hystrix 主要使用其统计(熔断,fallback,自动恢复),限流,合并相同请求等功能。
其中最复杂的组件是hystrix。 hystrix 基于rxjava。
动态路由,负载均衡,熔断,Feign 相关的实现均在 spring-cloud-netflix-core-1.3.1.RELEASE.jar 内。
zuul 介绍:
ribbon介绍:
hystrix介绍:
来源:oschina
链接:https://my.oschina.net/qidis/blog/4291638