我们知道
spring-cloud-starter-netflix-zuul
自身就包含了对
spring-cloud-starter-netflix-hystrix
和
spring-cloud-starter-netflix-ribbon
模块的依赖,所以
Zuul
天生就拥有线程隔离和断路器的自我保护功能,以及对服务调用的客户端负载均衡功能。
同时我们还可以通过
Hystrix
和
Ribbon
的参数来调整路由请求的各种超时时间等配置,下面分别进行介绍。
九、Hystrix 和 Ribbon 配置
1,断路器的超时时长设置
(1)
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds
参数可以用来设置
API
网关中路由转发请求的
HystrixCommand
执行超时时间,单位为毫秒。
#设置超时时间为10秒
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=10000
(2)当路由转发请求的命令执行时间超过该配置值后,
Hystrix
会将该执行命令标记为
TIMEOUT
并抛出异常,
Zuul
会对该异常进行处理并返回如下
JSON
信息给外部调用方。
2,Ribbon 的超时时长设置
(1)
ribbon.ConnectTimeout
参数用来设置路由转发请求的时候,创建请求连接的超时时间。若路由请求出现超时时,会自动进行重试路由请求,如果重试依然失败,则返回重试失败的
JSON
信息给外部调用方。
注意:
ribbon.ConnectTimeout
的配置值需要小于
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds
。否则当出现路由请求连接超时时,不会进行重试路由请求,而是直接按请求命令超时处理,返回
TIMEOUT
的错误信息。
#请求连接超时时间
ribbon.ConnectTimeout=1000
(2)
ribbon.ReadTimeout
参数用来设置路由转发请求的超时时间。它的处理与
ribbon.ConnectTimeout
类似,只不过它的超时是对请求建立之后的处理时间。若路由请求的处理时间超过该配置只且依赖服务的请求还未响应的时候,会进行重试路由请求。如果重试后依然没有获得请求响应,则返回重试失败的
JSON
信息给外部调用方。
注意:
ribbon.ReadTimeout
的配置值需要小于
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds
。否则当出现路由请求连接超时时,不会进行重试路由请求,而是直接按请求命令超时处理,返回
TIMEOUT
的错误信息。
#请求处理的超时时间
ribbon.ReadTimeout=2000
3,关闭重试机制