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