记录一次Debug的调试过程

和自甴很熟 提交于 2020-08-20 05:12:07

开发联调阶段通过zuul网关给app提供接口。但调用接口时好时坏,有时抛出如下异常。

{
     "timestamp" 1590461140265 ,
     "status" 500 ,
     "error" "Internal Server Error" ,
     "exception" "com.netflix.zuul.exception.ZuulException" ,
     "message" "TIMEOUT"
}

只知道是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介绍:

 

 

 

 

 

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!