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

鉴于对网关转发请求之后,访问各个服务有时间的要求,所以现在要在 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 ,可以自行定义,即

SpringCloud gateway网关 集成 Hystrix 为某个服务设置熔断时间_第1张图片

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

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

SpringCloud gateway网关 集成 Hystrix 为某个服务设置熔断时间_第2张图片

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

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

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

@RestController
public class FallBackController {

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

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

 

SpringCloud gateway网关 集成 Hystrix 为某个服务设置熔断时间_第3张图片

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

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

      

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

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

 

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

 

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

 

你可能感兴趣的:(SpringCloud)