Hystrix
系统容错工具
降级
- 调用远程服务失败(宕机、500错、超时),可以降级执行当前服务中的一段代码,向客户端返回结果
- 快速失败
熔断
- 当访问量过大,出现大量失败,可以过热保护,断开远程服务不再调用
- 限流
- 防止故障传播、雪崩效应
降级
1.hystrix依赖
2.启动类注解@EnableCircuitBreaker
3.添加降级代码
//当调用远程服务失败,跳转到指定的方法,执行降级代码
@HystrixCommand(fallbackmethod="方法名")
远程调用方法(){
restTemplate.getForObject(url,..)
}
Hystrix超时
Hystrix有默认的超时时间: 1秒
Hystrix超时要大于ribbon总的重试时间,否则,ribbon重试可能无效
Hystrix熔断
断路器打开的条件:
- 10秒内20次请求(必须首先满足)
- 50%失败,执行了降级代码
断路器打开后,所有请求直接执行降级代码
断路器打开几秒后,会进入半开状态,客户端调用会尝试向后台服务发送一次调用,
如果调用成功,断路器可以自动关闭,恢复正常
如果调用任然失败,继续保持打开状态几秒钟
Hystrix故障监控-Hystrix Dashboard
Hystrix利用Actuator工具,来暴露Hystrix的故障日志
Actuator
springboot提供的日志监控工具,可以暴露项目中多种监控信息
- 健康状态
- 系统环境变量
- spring容器中所有的对象
- spring mvc映射的所有路径
- ...
添加 actuator
1.添加actuator依赖
2.yml配置暴露监控数据
m.e.w.e.i="*" 暴露所有的监控
m.e.w.e.i=health 只暴露健康状态
m.e.w.e.i=["health","beans","mappings"] 暴露指定的多个监控
搭建Hystrix Dashboard
仪表盘可以是一个完全独立的项目,与其他项目都无关,也不用向注册表注册
1.hystrix dashboard 依赖
- @EnableHystrixDashboard
- yml-允许对哪台服务器开启监控
hystrix:
dashboard:
proxy-stream-allow-list: localhost
Feign
远程调用: RestTemplate
ribbon
hystrix
集成工具
- 远程调用:声明式客户端
- ribbon负载均衡和重试
- hystrix和熔断
声明式客户端接口
只需要声明一个抽象接口,就可以通过接口做远程调用,不需要再使用RestTemplate来调用
//调用远程的商品服务,获取订单的商品列表
//通过注解, 配置:
//1. 调用哪个服务
//2. 调用服务的哪个路径
//3. 向路径提交什么参数数据
@FeignClient(name="item-service")
public interface ItemnClient(){
@GetMapping("/{orderId}")
JsonResult> getItems(@PathVariable String orderId);
}
在这里使用@GetMapping("/{orderId}"),指定的是向远程服务调用的路径
Feign集成Ribbon
0配置,已经启用了负载均衡和重试
默认重试参数:
- MaxAutoRetries: 0
- MaxAutoRetriesNextServer: 1
- ReadTimeout: 1000
虚拟机
课前资料\虚拟机\
- centos-7-1908.zip 适用于VMware15以上的虚拟机
- centos-7-1908-vmware-12.zip 适用于VMware 12或以上的虚拟机
2.双机centos-7-1908.vmx文件(三个窗口图标)
3.启动这个虚拟机
按提示选择"已复制虚拟机"
4.登录
username:root
password:root
重置VMqare虚拟网络
VMware的虚拟网络非常不稳定,经常出现问题
- 没有ip
- 没有网卡
- 一切正常,但ping不通
重置VMwaare虚拟网络环境:
删除所有的虚拟网卡,再重新创建,初始化网络
1.编辑-虚拟网络编辑器
2.点右下角"更改设置"获得管理员权限
3.左下角"还原默认设置"按钮
设置NAT 网络网段: 192.168.64.0
编辑-虚拟网络编辑器
选择VMware8网卡
下面网段设置成192.168.64.0
设置centos7-1908的ip
# 在/root/ 主目录下准备了两个脚本程序: ip-static 和 ip-dhcp
# 里面修改网卡的配置文件 /etc/sysconfig/network-scripts/ifcfg-ens33
ls
cat ip-static
cat ip-dhcp
# 动态分配ip
./ip-dhcp
ifconfig
# 指定固定ip
./ip-static
ip: 192.168.64.8
ifconfig
如果网络服务network.service服务无法启动,可能是和NetworkManager服务发送冲突,可以禁用NetworkManager
# 停止 NetworkManager 服务
systemctl stop NetworkManager
# 禁用 NetworkManager
systemctl disable NetworkManager
Rabbitmq虚拟机
1.从centos-7-1908克隆: rabbitmq
2.设置ip
./ip-static
ip:192.168.64.140
3.用mobaxterm连接rabbitmq
4.上传rabbitmq离线安装文件