# 基本流程
- 引入相关依赖
- 覆盖默认的配置
- 在引导类上添加注解,开启相关的组件
# eureka 注册中心,服务的注册与发现
# 心跳过期 hhh-service-provider
eureka: | |
instance: | |
lease-expiration-duration-in-seconds: 15 #过期时间 | |
lease-renewal-interval-in-seconds: 5 # 心跳时间 |
# 拉取服务的间隔时间 hhh-service-consumer
eureka: | |
client: | |
registry-fetch-interval-seconds: 5 |
# 关闭自我保护,定期清除无效链接
eureka: | |
server: | |
eviction-interval-timer-in-ms: 5000 #单位是毫秒 | |
enable-self-preservation: false #关闭自我保护 |
# testTemplate
# ribbon: 负载均衡组件
- eureka 集成了
- @LoadBalanced: 开启负载均衡
- this.restTemplate.getForObject(“http://service-provider/user/” + id,User.class);
# BaseLoadBalancer 负载均衡策略
默认 springcloud 使用的是自己提供的轮询策略,也可以使用自己的策略
# hystrix:容错组件
降级:检查每次请求,是否请求超时,或者连接池已满
- 引入 hystrix 启动器
- hystrix.command.execution.isolation.thead.timeoutInMilliseconds: 6000 # 设置 hystrix 的超时时间为 6000ms
- 在引导类上添加一个注解:@EnableCircuitBreaker
- 定义熔断方法,局部 (要和被熔断的方法返回值和参数列表一致) 全局 (返回值类型要被熔断的方法一致,参数列表必须为空)
- @HystrixCommand (failbackMethod=“局部熔断的方法名”): 声明被熔断的方法
- @DefaultProperties (defaultFailback=“全部熔断方法名”)
熔断:不在发送请求
- close: 闭合状态,所有请求正常方法
- open: 打开状态,所有请求都无法访问,如果一定时间内容,失败的比例大于 50% 或者次数不少于 20 次
- half open: 半开状态,打开状态默认 5s 休眠期,在休眠期所有请求都无法正常访问,过了休眠期会进入半开状态,放部分请求通过
# Feign:远程调用组件
- 引入 openFegin 启动器
- fegin.hystrix.enable=true ,开启 Fegin 的熔断功能
- 在引导类上 @EnableFeignClients
- 创建一个接口 @FeginClient (value=“服务名”,fallback = 实现类.class)
- 在接口中定义一些方法,这些方法的书写方式跟之前 controller 类似
- 创建一个熔断类,实现 feigin 接口,实现对应的方法,这些方法都是熔断方法
# Zuul 网关组件
-
引入 zuul 的启动器
-
配置:zuul.routers.<路由名称>.path=/service-procider/**
zuul.routers.<路由名称>.url=http://localhost:8002
zuul.routers.<路由名称>.path=/service-provider
zuul.routers.<路由名称>.serviceId=service-provider
zuul.routers. 服务名 =/servuce-provider/**
不用配置,默认就是服务 id 开头路径
-
@EnableZuulProxy
过滤器:
创建一个类继承 ZuulFilter 基类
重写四个方法
- filterType: pre route post error
- filterOrder:返回值越小,优先级越高
- shouldFilter:是否执行run方法,true执行
- run:具体的拦截逻辑