在上周末,我接手的一个项目出错了,mq大量挤压,retry队列大量挤压。看错误,是项目中的一个微服务连接项目中另一个负责数据库的微服务一直报超时,HystrixRuntimeException,熔断。根本原因是:
com.netflix.hystrix.exception.HystrixRuntimeException: MongodbComHandle#InsertWaybill(Edi_Waybill_Message) failed
Caused by: feign.RetryableException: connect timed out executing POST http://服务名/....
Caused by: java.net.SocketTimeoutException: connect timed out
然后猜测是可能有几个:mongo数据库问题,线程池问题,网络问题,后来经过数据中心的同事优化了mongo,自己优化了线程池等,发现问题还是有,后来才想到这个项目的spring 组件的版本都较低,会不会是由于这个原因;原来项目使用的是springBoot1.4.6和spring Cloud Camden;升级到了springBoot1.5.10版本以及spring Cloud Edgware.SR5 问题就消失了。
这个问题其他的原因:如果一直错,不是偶尔概率性的错,观察下注册中心是否有对应的服务。 如果是概率性的错误,除了版本问题,我以前一碰到过微服务实例不够,大量请求下默认线程不够使的情况,这种情况,可以多开实例,以及调整tomcat的最大连接数或者hystrix的coreSize。
借此记录,以便提醒自己要多注意框架等版本的区别,多看官方文档。