Feign服务间调用超时问题(结合项目中的TxLCNf框架)
Feign服务间调用超时问题(结合项目中的TxLCNf框架)
1.消费方超时
这里是指,服务方等待消费方返回事务的消息,等待超时(结合txlcn框架来说);在txlcn分布式事务框架中,消费方调用服务方的接口,调用成功后,睡10s,在提交事务;此时在服务方会报超时的错误信息,该错误和txlcn的配置项: tm.compensate.maxWaitTime=xxxx 有关
正常调用的日志信息
1 | X-Requested-Inner>>>bi@123jiao!678suo |
超时时服务方打印的信息(调用方线程睡了10s
)
1 | btc测试调用... |
上面可以看到15:07:24
开始执行,15:07:29 [Thread-127] INFO c.c.t.d.r.LCNDBConnection - [transaction,176] - lcn transaction over, res -> groupId:HkDIt5SU and state is rollback
事务回滚,中间相差5s,这应该就是超时时间
增加超时时间,增加到15s
1 | #指的是模块执行自动超时的最大时间,该最大时间若过段会导致事务机制异常,该时间必须要模块之间通讯的最大超过时间。 |
从上面的日志信息可知程序在15:23:04
秒开始执行,在15:23:15
秒执行成功,并成功提交事务,main-Thread
睡了10
秒模拟超时,修改tx
配置文件,最后成功提交事务。
####2.服务方超时
服务方超时:这里是指消费方调用服务方接口超时,和feign的配置有关
在服务方方法中睡30s
,结果消费方在3s
后报超时的错误,返回500到前端;服务方在等待30s
后,出现如下面错误:
1 | btc测试调用... |
就是这个错误,之前我在测试机上面,看到多次,找不到原因
然后,这个3s
就是之前用到了服务降级,在配置文件中
1 | hystrix: |
网上找到三种解决方法:
1 | 1、设置Hystrix的超时时间,例如设置超时时间为5s |
先试试直接关了:feign.hystrix.enabled: false
执行了差不多5s
后,报了如下超时错误
1 | 16:07:36.481 [http-nio-10505-exec-1] DEBUG c.b.s.p.f.BTCFeign - [log,70] - [BTCFeign#test] <--- ERROR SocketTimeoutException: Read timed out (5780ms) |
应该还有一个超时时间,是的
在hystrix禁用后,feign调用的超时时间和下面两个配置有关
1 | #feign的配置 |
feign的超时:
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds
- 在配置了
hystrix
情况下,超时时间和hystrix
配置相关; - 如果
feign
和ribbon
都没有配置,此时hystrix的这个配置是无效的,取默认值1s
; - 如果配置了
feign
或者ribbon
,且feign
或ribbon
的值小于hystrix
配置的,hystrix
的配置项依然无效,会取feign
或者ribbon
的值; feign
和ribbon
同时配置,feign
的优先级高;所以,
hystrix
的配置时间时,feign
或ribbon
必须配置要一个,且时间要小于他们;
- 在配置了
在没有配置
hystrix
情况下,也没有feign.client.config.connectTimeout|readTimeout
,没有ribbon.ReadTimeout|ConnectTimeout
配置,默认是超时时间是1s
;在没有配置
hystrix
情况下,配置了feign.client.config
和ribbon
,前者优于后者,如果没有配置feign.client.config
就取ribbon
的配置时间
- 本文标题:Feign服务间调用超时问题(结合项目中的TxLCNf框架)
- 本文作者:HeRui
- 本文链接:https://hr2812.cn/2019/11/19/feign-time-out-problem-with-txlcn/
- 版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!