测试访问时长
修改下业务类,增加sleep休眠时长,以此查看Zuul的熔断
@GetMapping("/test1") public Object test1() { try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } return "dbToEs"; } @GetMapping("/test2") public Object test2() { try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } return "dbToEs"; } @GetMapping("/test3") public Object test3() { try { Thread.sleep(5500); } catch (InterruptedException e) { e.printStackTrace(); } return "dbToEs"; }
大概执行2秒多,然后还没执行完,zuul就执行熔断了。
报错信息
com.netflix.zuul.exception.ZuulException:Forwarding error
Caused by: java.lang.RuntimeException: java.net.SocketTimeoutException: Read timed out
Caused by: java.net.SocketTimeoutException: Read timed out
很明显,根据报错信息,应该是zuul的调用等待时间超时
解决办法
如果路由方式是serviceId的方式,配置ribbon生效,如果是url的方式,则配置zuul.host生效。(此处重要!使用serviceId路由和url路由是不一样的超时策略)
以下是两种配置文件的方式,可根据需要选取配置。
配置application.yml文件
ribbon:
ReadTimeout: 100000
ConnectTimeout: 60000
SocketTimeout: 100000
zuul:
max:
host:
connections: 5000
host:
socket-timeout-millis: 60000
connect-timeout-millis: 60000
配置application.properties文件
ribbon.ReadTimeout=100000
ribbon.ConnectTimeout=60000
ribbon.SocketTimeout=100000
zuul.max.host.connections=5000
zuul.host.socket-timeout-millis=60000
zuul.host.connect-timeout-millis=60000
文章转载至:https://blog.csdn.net/tianyaleixiaowu/article/details/78772269、https://www.cnblogs.com/dauber/p/9424505.html