SpringCloud(五)—— Hystrik(熔断器)

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端口服务的时候,这些图形就会发生相应的变化

 

 

おすすめ

転載: blog.csdn.net/hzkcsdnmm/article/details/108256671