Hytrixs:主要用于微服务中的熔断和降级的处理,简言之:程序出异常或者不响应时,为了避免全局的服务因为一个服务而瘫痪而做的事情,当某个服务单元发生故障后,通过熔断器的故障监控,会进行服务的降级,向调用方返回一个符合预期的、可处理的备选响应,当失败的调用到达一定阈值后(如:5s内20次调用失败),则启动熔断机制
1.服务熔断:
新建SpringBoot项目,在pom种导入
<!--hystrix熔断-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
<version>2.2.3.RELEASE</version>
</dependency>
<!--用于被consul发现-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
<version>2.2.3.RELEASE</version>
</dependency>
<!--把consul作为配置中心-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-config</artifactId>
<version>2.2.3.RELEASE</version>
</dependency>
<!--actuator是监控系统健康情况的工具-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
在bootstrap种添加配置信息,暂时没有用到配置中心先注释掉
server:
port: 8080
spring:
application:
name: hystrix
cloud:
consul:
host: localhost
port: 8500
discovery:
service-name: ${spring.application.name}
# config:
# enabled: true
# format: yaml
# default-context: ${spring.application.name}
# prefix: config
# data-key: data
然后编写测试接口类
@RestController
public class TestController {
@RequestMapping(value="test/{id}",method = RequestMethod.GET)
@HystrixCommand(fallbackMethod = "invalidProcess") //一旦方法失败并抛出错误信息,则自动调用@HystrixCommmand对应的方法
public User get(@PathVariable("id") int id){
if(id>=0&&id<=5){
User user=new User();
user.setId(id);
user.setUsername("123");
user.setPassword("123");
user.setInfo("123");
return user;
}else{
throw new RuntimeException("invalid");
}
}
public User invalidProcess(@PathVariable("id") int id){
User user=new User();
user.setId(id);
user.setUsername("该id"+id+"没有对应的信息");
return user;
}
}
public class User {
private int id;
private String username;
private String password;
private String info;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getInfo() {
return info;
}
public void setInfo(String info) {
this.info = info;
}
}
然后在启动类中声明熔断机制
最后我们就可以测试一下了:
2.服务降级
我们会发现,方法一个还好,但如果多了之后,按上面所述是不是得每个方法都要加一个熔断方法,这样就太麻烦了
所以我们把所有方法都定义到一个interface接口种,然后让接口去调用fallback方法,统一去处理各个方法的熔断
服务降级处理是在客户端,与服务端没关系,所以要在Feign种进行
测试:当我关掉A、B、C三个服务中的的C服务时,再次调用后会显示fallback种返回的降级信息
3.熔断监控(Hystrix dashboard)
Hystrix会持续记录所有通过Hystrix发起的请求的执行信息,并以图形界面的形式展示给用户,包括每秒执行多少请求多少成功,多少失败等。
1.创建一个SpringBoot项目,添加maven依赖,配置bootstrap.yml文件(端口号和consul)
2.启动类种添加@EnableHystrixDashboard
3.启动服务,然后访问localhost:9001/hystrix,看到有一个豪猪出现说明成功启动
4.如何监控:
纯数据访问:首先保证被监控的服务已经启动,然后访问 http://localhost:8050/hystrix.stream 即可(8050是配置了熔断机制的服务)
图形界面:把http://localhost:8050/hystrix.stream填入到之前的hytrix豪猪启动页面,delay写入检查间隔,Title写入标题,然后提交,即可查看
7色:分别代表各个菜单对应的颜色
1圈:左上角的圈,其颜色代表:健康度(绿<黄<橙<红),大小(半径)会根据流量发生相应的变化,流量越大半径越大
1线:圈下面的线,2分钟内流量的变化(上升或下降的趋势)
当你去访问8050端口服务的时候,这些图形就会发生相应的变化