Feign服务间调用超时问题(结合项目中的TxLCNf框架)

Feign服务间调用超时问题(结合项目中的TxLCNf框架)

1.消费方超时

这里是指,服务方等待消费方返回事务的消息,等待超时(结合txlcn框架来说);在txlcn分布式事务框架中,消费方调用服务方的接口,调用成功后,睡10s,在提交事务;此时在服务方会报超时的错误信息,该错误和txlcn的配置项: tm.compensate.maxWaitTime=xxxx 有关

正常调用的日志信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
X-Requested-Inner>>>bi@123jiao!678suo
btc测试调用...
15:00:44.244 [http-nio-18301-exec-1] DEBUG c.b.s.b.m.B.test - [debug,159] - ==> Preparing: update dapp_u_user_info set modify_time=now(),email=? where user_id=?
15:00:44.245 [http-nio-18301-exec-1] DEBUG c.b.s.b.m.B.test - [debug,159] - ==> Parameters: demo11(String), a297a261-4f6e-49bc-9a94-a9785f58bd9c(String)
15:00:44.260 [http-nio-18301-exec-1] DEBUG c.b.s.b.m.B.test - [debug,159] - <== Updates: 1
15:00:44.271 [sender-thread-6] INFO c.c.t.f.u.SocketManager - [sleepSend,85] - send-msg->{"a":"atg","k":"zkZcP6tG","p":{"s":0,"t":"15ZfwYcQ","ms":"public void com.blockchain.server.btc.service.impl.BtcWalletTransferServiceImpl.test(java.lang.String,java.lang.String)","g":"4M3czL7a"}}
maxOutTime : 5000
15:00:44.323 [Thread-109] INFO c.c.t.d.r.LCNDBConnection - [transaction,160] - transaction is wait for TxManager notify, groupId 4M3czL7a
15:00:44.323 [receiver-thread-32] INFO c.c.t.n.s.i.NettyControlServiceImpl - [executeService,84] - receive response -> {"d":"{\"st\":1571209243109,\"r\":0,\"s\":0,\"nt\":1571209244322,\"g\":\"4M3czL7a\",\"i\":0,\"o\":0}","k":"zkZcP6tG"}
15:00:44.326 [http-nio-18301-exec-1] INFO c.c.t.s.l.ServerListener - [onApplicationEvent,27] - onApplicationEvent -> onApplicationEvent.
15:00:44.326 [TxInit-thread] INFO c.c.t.l.s.i.InitServiceImpl - [start,24] - socket-start..
15:00:44.452 [receiver-thread-33] INFO c.c.t.n.s.i.NettyControlServiceImpl - [executeService,77] - receive cmd -> {"a":"t","c":1,"t":"15ZfwYcQ","k":"DYsnIZt8"}
15:00:44.452 [receiver-thread-33] INFO c.c.t.c.s.i.ActionTServiceImpl - [execute,35] - accept notify data ->{"a":"t","c":1,"t":"15ZfwYcQ","k":"DYsnIZt8"}
15:00:44.484 [Thread-109] INFO c.c.t.d.r.LCNDBConnection - [transaction,176] - lcn transaction over, res -> groupId:4M3czL7a and state is commit

超时时服务方打印的信息(调用方线程睡了10s)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
btc测试调用...
15:07:24.676 [http-nio-18301-exec-4] DEBUG c.b.s.b.m.B.test - [debug,159] - ==> Preparing: update dapp_u_user_info set modify_time=now(),email=? where user_id=?
15:07:24.677 [http-nio-18301-exec-4] DEBUG c.b.s.b.m.B.test - [debug,159] - ==> Parameters: demo11(String), a297a261-4f6e-49bc-9a94-a9785f58bd9c(String)
15:07:24.680 [http-nio-18301-exec-4] DEBUG c.b.s.b.m.B.test - [debug,159] - <== Updates: 1
maxOutTime : 5000
15:07:24.713 [sender-thread-7] INFO c.c.t.f.u.SocketManager - [sleepSend,85] - send-msg->{"a":"atg","k":"i2eAfrw4","p":{"s":0,"t":"k7Sa0UmX","ms":"public void com.blockchain.server.btc.service.impl.BtcWalletTransferServiceImpl.test(java.lang.String,java.lang.String)","g":"HkDIt5SU"}}
15:07:24.714 [Thread-127] INFO c.c.t.d.r.LCNDBConnection - [transaction,160] - transaction is wait for TxManager notify, groupId HkDIt5SU
15:07:24.726 [receiver-thread-61] INFO c.c.t.n.s.i.NettyControlServiceImpl - [executeService,84] - receive response -> {"d":"{\"st\":1571209643257,\"r\":0,\"s\":0,\"nt\":1571209644723,\"g\":\"HkDIt5SU\",\"i\":0,\"o\":0}","k":"i2eAfrw4"}
15:07:24.749 [http-nio-18301-exec-4] INFO c.c.t.s.l.ServerListener - [onApplicationEvent,27] - onApplicationEvent -> onApplicationEvent.
15:07:24.754 [TxInit-thread] INFO c.c.t.l.s.i.InitServiceImpl - [start,24] - socket-start..
auto execute ,groupId:HkDIt5SU
15:07:29.713 [sender-thread-8] INFO c.c.t.f.u.SocketManager - [sleepSend,85] - send-msg->{"a":"ckg","k":"GEC41B1Q","p":{"t":"datasource_k7Sa0UmX","g":"HkDIt5SU"}}
15:07:29.718 [receiver-thread-62] INFO c.c.t.n.s.i.NettyControlServiceImpl - [executeService,84] - receive response -> {"d":"0","k":"GEC41B1Q"}
15:07:29.740 [Thread-127] INFO c.c.t.d.r.LCNDBConnection - [transaction,176] - lcn transaction over, res -> groupId:HkDIt5SU and state is rollback
15:07:34.783 [receiver-thread-63] INFO c.c.t.n.s.i.NettyControlServiceImpl - [executeService,77] - receive cmd -> {"a":"t","c":0,"t":"k7Sa0UmX","k":"e0JwOnHP"}
15:07:34.784 [receiver-thread-63] INFO c.c.t.c.s.i.ActionTServiceImpl - [execute,35] - accept notify data ->{"a":"t","c":0,"t":"k7Sa0UmX","k":"e0JwOnHP"}
15:07:34.784 [receiver-thread-63] INFO c.c.t.c.s.i.ActionTServiceImpl - [execute,66] - accept notify response res ->0
15:07:34.785 [receiver-thread-63] INFO c.c.t.c.s.i.TransactionControlServiceImpl - [notifyTransactionMsg,50] - send notify data ->{"p":{"d":"0"},"a":"t","k":"e0JwOnHP"}
15:07:34.787 [receiver-thread-64] INFO c.c.t.n.s.i.NettyControlServiceImpl - [executeService,84] - receive response -> {"d":"","k":"e0JwOnHP"}

上面可以看到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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#指的是模块执行自动超时的最大时间,该最大时间若过段会导致事务机制异常,该时间必须要模块之间通讯的最大超过时间。
#例如,若模块A与模块B,请求超时的最大时间是5秒,则建议改时间至少大于5秒。
tm.compensate.maxWaitTime=5000
修改为
tm.compensate.maxWaitTime=15000
这是打印出的日志就是:

btc测试调用...
15:23:04.886 [http-nio-18301-exec-1] DEBUG c.b.s.b.m.B.test - [debug,159] - ==> Preparing: update dapp_u_user_info set modify_time=now(),email=? where user_id=?
15:23:04.912 [http-nio-18301-exec-1] DEBUG c.b.s.b.m.B.test - [debug,159] - ==> Parameters: demo11(String), a297a261-4f6e-49bc-9a94-a9785f58bd9c(String)
15:23:04.915 [http-nio-18301-exec-1] DEBUG c.b.s.b.m.B.test - [debug,159] - <== Updates: 1
maxOutTime : 15000
15:23:04.920 [sender-thread-2] INFO c.c.t.f.u.SocketManager - [sleepSend,85] - send-msg->{"a":"atg","k":"iOAoPJY7","p":{"s":0,"t":"M7jajJVi","ms":"public void com.blockchain.server.btc.service.impl.BtcWalletTransferServiceImpl.test(java.lang.String,java.lang.String)","g":"TabNLFcw"}}
15:23:04.920 [Thread-86] INFO c.c.t.d.r.LCNDBConnection - [transaction,160] - transaction is wait for TxManager notify, groupId TabNLFcw
15:23:04.926 [receiver-thread-5] INFO c.c.t.n.s.i.NettyControlServiceImpl - [executeService,84] - receive response -> {"d":"{\"st\":1571210583545,\"r\":0,\"s\":0,\"nt\":1571210584925,\"g\":\"TabNLFcw\",\"i\":0,\"o\":0}","k":"iOAoPJY7"}
15:23:04.959 [http-nio-18301-exec-1] INFO c.c.t.s.l.ServerListener - [onApplicationEvent,27] - onApplicationEvent -> onApplicationEvent.
15:23:04.960 [TxInit-thread] INFO c.c.t.l.s.i.InitServiceImpl - [start,24] - socket-start..
15:23:14.998 [receiver-thread-6] INFO c.c.t.n.s.i.NettyControlServiceImpl - [executeService,77] - receive cmd -> {"a":"t","c":1,"t":"M7jajJVi","k":"IdasBdx2"}
15:23:14.998 [receiver-thread-6] INFO c.c.t.c.s.i.ActionTServiceImpl - [execute,35] - accept notify data ->{"a":"t","c":1,"t":"M7jajJVi","k":"IdasBdx2"}
15:23:15.027 [Thread-86] INFO c.c.t.d.r.LCNDBConnection - [transaction,176] - lcn transaction over, res -> groupId:TabNLFcw and state is commit

从上面的日志信息可知程序在15:23:04秒开始执行,在15:23:15秒执行成功,并成功提交事务,main-Thread睡了10秒模拟超时,修改tx配置文件,最后成功提交事务。


####2.服务方超时

服务方超时:这里是指消费方调用服务方接口超时,和feign的配置有关

在服务方方法中睡30s,结果消费方在3s后报超时的错误,返回500到前端;服务方在等待30s后,出现如下面错误:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
btc测试调用...
15:53:50.921 [DiscoveryClient-CacheRefreshExecutor-0] INFO c.c.t.s.l.ServerListener - [onApplicationEvent,27] - onApplicationEvent -> onApplicationEvent.
15:53:50.922 [TxInit-thread] INFO c.c.t.l.s.i.InitServiceImpl - [start,24] - socket-start..
15:53:57.872 [http-nio-18301-exec-4] DEBUG c.b.s.b.m.B.test - [debug,159] - ==> Preparing: update dapp_u_user_info set modify_time=now(),email=? where user_id=?
15:53:57.873 [http-nio-18301-exec-4] DEBUG c.b.s.b.m.B.test - [debug,159] - ==> Parameters: demo12(String), a297a261-4f6e-49bc-9a94-a9785f58bd9c(String)
15:53:57.875 [http-nio-18301-exec-4] DEBUG c.b.s.b.m.B.test - [debug,159] - <== Updates: 1
maxOutTime : 15000
15:53:57.875 [Thread-123] INFO c.c.t.d.r.LCNDBConnection - [transaction,160] - transaction is wait for TxManager notify, groupId kcxZJOnG
15:53:57.876 [sender-thread-5] INFO c.c.t.f.u.SocketManager - [sleepSend,85] - send-msg->{"a":"atg","k":"sMitKicP","p":{"s":0,"t":"Z0N0azcs","ms":"public void com.blockchain.server.btc.service.impl.BtcWalletTransferServiceImpl.test(java.lang.String,java.lang.String)","g":"kcxZJOnG"}}
15:53:57.878 [receiver-thread-55] INFO c.c.t.n.s.i.NettyControlServiceImpl - [executeService,84] - receive response -> {"d":"","k":"sMitKicP"}
15:53:57.879 [http-nio-18301-exec-4] WARN c.c.t.a.s.i.TxRunningTransactionServerImpl - [execute,105] - wake the waitTask: true
15:53:57.879 [http-nio-18301-exec-4] ERROR c.b.s.b.c.GlobalExceptionHandle - [handleUnknownException,60] - Wed Oct 16 15:53:57 CST 2019系统抛出异常,异常是:java.lang.reflect.UndeclaredThrowableException,异常信息是:null
15:53:57.879 [http-nio-18301-exec-4] ERROR c.b.s.b.c.GlobalExceptionHandle - [handleUnknownException,64] - 请求路径:http://SKY-20180728BUM:18301/inner/walletTx/test
15:53:57.880 [http-nio-18301-exec-4] ERROR c.b.s.b.c.GlobalExceptionHandle - [handleUnknownException,67] - 响应头:null
java.lang.reflect.UndeclaredThrowableException
at com.blockchain.server.btc.service.impl.BtcWalletTransferServiceImpl$$EnhancerBySpringCGLIB$$3b11ec8b.test(<generated>)
at com.blockchain.server.btc.inner.BtcWalletTransferInner.test(BtcWalletTransferInner.java:56)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:209)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:877)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:783)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:991)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:925)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:974)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:877)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:851)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.filterAndRecordMetrics(WebMvcMetricsFilter.java:158)
at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.filterAndRecordMetrics(WebMvcMetricsFilter.java:126)
at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:111)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:123)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at com.blockchain.server.base.filter.XssFilter.doFilter(XssFilter.java:56)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.boot.actuate.web.trace.servlet.HttpTraceFilter.doFilterInternal(HttpTraceFilter.java:90)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:109)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:93)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.session.web.http.SessionRepositoryFilter.doFilterInternal(SessionRepositoryFilter.java:147)
at org.springframework.session.web.http.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:81)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:496)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:803)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:790)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1468)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
Caused by: com.lorne.core.framework.exception.ServiceException: update TxGroup error, groupId:kcxZJOnG
at com.codingapi.tx.aop.service.impl.TxRunningTransactionServerImpl.execute(TxRunningTransactionServerImpl.java:90)
at com.codingapi.tx.aop.service.impl.AspectBeforeServiceImpl.around(AspectBeforeServiceImpl.java:58)
at com.codingapi.tx.springcloud.interceptor.TxManagerInterceptor.around(TxManagerInterceptor.java:32)
at com.codingapi.tx.springcloud.interceptor.TransactionAspect.around(TransactionAspect.java:39)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:644)
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:633)
at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:70)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:174)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688)
... 76 more
15:53:57.882 [http-nio-18301-exec-4] INFO c.c.t.s.l.ServerListener - [onApplicationEvent,27] - onApplicationEvent -> onApplicationEvent.
15:53:57.883 [TxInit-thread] INFO c.c.t.l.s.i.InitServiceImpl - [start,24] - socket-start..
15:53:57.903 [Thread-123] INFO c.c.t.d.r.LCNDBConnection - [transaction,176] - lcn transaction over, res -> groupId:kcxZJOnG and state is rollback

就是这个错误,之前我在测试机上面,看到多次,找不到原因

然后,这个3s就是之前用到了服务降级,在配置文件中

1
2
3
4
5
6
7
8
9
hystrix:
command:
default:
execution:
timeout:
enabled: true #如果设置为false execution.isolation.thread.timeoutInMilliseconds配置无效
isolation:
thread:
timeoutInMilliseconds: 3000 #这个超时时间,就是消费方调用服务方的超时时间,3s内服务方没有返回就会报错

网上找到三种解决方法:

1
2
3
4
5
6
7
8
9
10
11
1、设置Hystrix的超时时间,例如设置超时时间为5s

hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds: 5000

2、不设置Hystrix的超时时间

hystrix.command.default.execution.timeout.enabled: false

3、禁用Hystrix

feign.hystrix.enabled: false

先试试直接关了:feign.hystrix.enabled: false
执行了差不多5s后,报了如下超时错误

1
2
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)
16:07:36.482 [http-nio-10505-exec-1] INFO c.c.t.d.r.LCNStartConnection - [rollback,99] - rollback label

应该还有一个超时时间,是的
在hystrix禁用后,feign调用的超时时间和下面两个配置有关

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#feign的配置
feign:
hystrix:
#开启熔断器
enabled: false
client:
config:
default:
connectTimeout: 5000
readTimeout: 5000
loggerLevel: BASIC
#ribbon的配置,它的配置
ribbon:
ReadTimeout: 60000
ConnectTimeout: 60000

feign的超时:

  1. hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds

    • 在配置了hystrix情况下,超时时间和hystrix配置相关;
    • 如果feignribbon都没有配置,此时hystrix的这个配置是无效的,取默认值1s
    • 如果配置了feign或者ribbon,且feignribbon的值小于hystrix配置的,hystrix的配置项依然无效,会取feign或者ribbon的值;
    • feignribbon同时配置,feign的优先级高;

      所以,hystrix的配置时间时,feignribbon必须配置要一个,且时间要小于他们;

  2. 在没有配置hystrix情况下,也没有feign.client.config.connectTimeout|readTimeout,没有ribbon.ReadTimeout|ConnectTimeout配置,默认是超时时间是1s

  3. 在没有配置hystrix情况下,配置了feign.client.configribbon,前者优于后者,如果没有配置feign.client.config就取ribbon的配置时间

Kommentare

:D 一言句子获取中...

Loading...Wait a Minute!