SpringCloud gateway网关 集成 Hystrix 为某个服务设置熔断时间

518 阅读4分钟

鉴于对网关转发请求之后,访问各个服务有时间的要求,所以现在要在 geteway 网关中增加断路器,就是今天要说的 :Hystrix。

先讲讲 Hystrix 的用途:

    a)线程池隔离

    b)信号量隔离

    c)熔断

    d)降级回退

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

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

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

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

直接上 yml 文件配置吧:

server: port: 8080

spring: 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,实现里面的方法。

           但是不建议这么做,既然有轮子了,我们就不重复造轮子了。再者,如果手写的不全面的话,就会导致 Hystrix 时间不生效,就很尴尬了。

      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)



   也是昨天要用所以看了下官网,目前还未看源码,今天去看下源码,看懂了再把具体的代码分析加上,希望对大家在用 Hystrix 的童鞋有所帮助。

我是进阶的球儿,大家一起2019年的爬坑历程。感觉分享很给力的话给个赞,谢谢!!!有问题也可以下方留言或者加本人QQ:313989006 进行沟通。