当前位置: > > > API网关服务组件Spring Cloud Zuul使用详解7(路由详解7:Hystrix和Ribbon配置)

API网关服务组件Spring Cloud Zuul使用详解7(路由详解7:Hystrix和Ribbon配置)

    我们知道 spring-cloud-starter-netflix-zuul 自身就包含了对 spring-cloud-starter-netflix-hystrixspring-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,关闭重试机制

    在使用 Zuul 的服务路由时,如果路由转发请求发生超时时(连接超时或者处理超时),只要超时时间的设置小于 Hystrix 的命令超时时间,那么它就会自动发起重试。如果我们需要关闭该重试机制,可以通过如下两个参数进行设置。
(1)我们可以通过如下设置全局关闭重试机制:
zuul.retryable=false

(2)或者指定路由关闭重试机制(这里以 hello-service 这个路由为例):
zuul.routes.hello-service.retryable=false
评论0