SpringCloud gateway网关 集成 Hystrix 为某个服务设置熔断时间
先讲讲 Hystrix 的用途:

a)线程池隔离

    b)信号量隔离

    c)熔断

    d)降级回退

目的:针对网关的每个服务设置熔断时间。

我们今天要讲的是熔断机制。对于断路器,可能大部分人都不是很熟悉,而如果只是依靠 度娘 的话,找了半天可能都不是你想要的结果,最多的讲的就是 Hystrix command default 配置熔断时间。

大部分也只会设置 default,但是有时候需求是为每个服务设置熔断时间,因为每个模块的服务的耗时都不相同,比如系统 管理模块,数据量小,那耗时相对就会少;比如上传文件模块,网速的不同,会导致耗时相对会增加,此时就需要为具体的模块设置具体的熔断时间,来增加系统的运行效率。

今天就给大家讲一个详细且简单的配置方式,使用 yml 文件配置的方式实现 Hystrix 。

直接上 yml 文件配置吧:

server:
 port: 8080spring:
 redis:
 lettuce:
 pool:
 max-active: 20
 max-idle: 8
 min-idle: 5
 max-wait: 5000
 timeout: 5000
 cluster:
 nodes: (redis地址)
 application:
 name: service-gateway
 main:
 allow-bean-definition-overriding: true #当遇到同样名字的时候,是否允许覆盖注册
 cloud:
 gateway:
 discovery:
 locator:
 enabled: false
 lowerCaseServiceId: true
 routes:
 - id : systemService
 uri: http://localhost:8081
 predicates:
 - Path=/system/**
 filters:
 - name: Hystrix # Hystrix Filter的名称、设置成默认的
 args: # Hystrix 配置参数
 name: fallbackcmd # HystrixCommand 的名字
 fallbackUri: forward:/fallback # fallback对用的uri
 token:
 timeout: 3600
 logging:
 config: classpath:logback/logback-local.xml

Hystrix 配置

hystrix:
 command:
 default:
 execution:
 isolation:
 thread:
 timeoutInMilliseconds: 6000
 fallbackcmd:
 execution:
 isolation:
 thread:
 timeoutInMilliseconds: 20000 # Hystrix 的 fallbackcmd 时间
 threadpool:
 default:
 coreSize: 100 # Hystrix 更改默认并发数配置

我们这里主要关心的是 Hystrix 配置。

下面是详细的讲解:

1、在路由中配置对应服务的 args,抓重点:主要是 name 值,我这里自定义的是 fallbackcmd ,可以自行定义,即



    2、Hystrix 默认的熔断时间是 1s,那我们设置我们需要的服务的熔断时间就需要设置上面 name 的如下属性值。

          default 是定义默认的熔断时间,fallbackcmd 是定义 systemService 服务的熔断时间。



      3、这里设置好了,还有一点需要注意的是:服务的 filters -name 要指定为 Hystrix ,否则需要自己手写一个 filter,继承 AbstractGatewayFilterFactory,实现里面的方法。

      4、fallbackUri 是指定当熔断之后出发的 url,这个就可以自行定义了,下面随便写一个给大家演示一下。

@RestController
public class FallBackController {

@RequestMapping(value = "/fallback")
public RestResponse<String> fallBackController() {
    return RestResponse.fail().setMsg("服务读取超时");
}

}
5、有人很想问,为什么要配置对应服务的 filters -args name 值的 Hystrix,那大家不妨看下Hystrix 官网的解释,这里截取一段你就恍然大悟了。

这里是 HystrixCommandKey 的 name,所以我们需要在 hystrix.command 后面加 .fallbackcmd来设置对应服务的熔断时间。

      6、最后,在SpringBoot启动项上加上 @EnableHystrix 注解,表示启动 Hystrix 熔断机制。

追加:(更改Hystrix 默认的并发连接数,解决当并发较高的情况下,导致服务直接熔断)

threadpool:
          default:
              coreSize: 100 # Hystrix 更改默认并发数配置(默认是10,这里改为100)