Hystrix服务熔断和Hystrix DashBoard仪表盘

配置和依赖不说了,在另外一篇记录:[Hystrix做服务熔断

](https://blog.csdn.net/whiteBearClimb/article/details/108735872)

这一步是针对生产者来做的熔断
@HystrixCommand(fallbackMethod = "fallback_functions",commandProperties = {
    
    
        @HystrixProperty(name = "circuitBreaker.enabled", value = "true"), // 是否开启断路器
        @HystrixProperty(name = "circuitBreaker.requestVolumeThreshold", value = "10"), // 请求次数,意思是在固定的时间窗口期内的请求次数的限制阈值
        @HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds",value = "10000"), // 时间窗口期,就是一个固定的时间范围,例如10秒内的请求次数和错误率,用来判断是否需要开启断路器的。
        @HystrixProperty(name = "circuitBreaker.errorThresholdPercentage",value = "60"), // 失败率达到多少%后跳闸,错误百分比阈值,请求总数在快照时间窗口内超过了阈值,并且错误率超出了该百分比,则会进行熔断。
})
public String testBreaker(String id) {
    
    
    System.out.println("进来了,"+id);
    int a = Integer.parseInt(id);
    if (a<0){
    
    
        throw new RuntimeException("ID不能是负数");
    }
    return "测试服务熔断的";
}

public String fallback_functions(String id){
    
    
    System.out.println("进入出错处理方法了");
    return "99";
}

在这里插入图片描述

过几分钟后再试试就可以:
在这里插入图片描述

虽然我们有各种日志,但是集群服务太多情况下,我们很难一部部机器找日志看,当然我们可以买阿里云的日志服务,只需要指定一下日志在服务器哪个位置,阿里云日志读取进去还给你做好了ES分词,排查非常方便,我上家公司就是直接买的阿里云日志。
言归正传我们要更优雅地看服务集群的使用情况,可以用HystrixDashboard:

(1)新建一个SpringBoot项目作为仪表盘入口:
在这里插入图片描述
(2)首先明确这里监控是监控生产者的服务是否可用的,所以生产者的pom文件要加入(如果一个项目即是服务提供方也是服务消费方,那当然也可以加)pom文件中加上:

org.springframework.cloud spring-cloud-starter-netflix-hystrix-dashboard org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-actuator

(3)主启动类:

@SpringBootApplication
@EnableHystrixDashboard
public class AppHystrixDashboadMain {
    
    
    public static void main(String[] args) {
    
    
        SpringApplication.run(AppHystrixDashboadMain.class, args);
    }
}

(4)然后生产者的启动类要加上断路器注解表明开启Hystrix断路器,同时由于Spring版本升级,要加一个Bean:


@SpringBootApplication
@EnableEurekaClient
@EnableDiscoveryClient
@EnableHystrix
@EnableCircuitBreaker
public class CirculateMain {
    
    
    public static void main(String[] args) {
    
    
        SpringApplication.run(CirculateMain.class, args);
    }
    @Bean
    public ServletRegistrationBean getServlet(){
    
    
        HystrixMetricsStreamServlet streamServlet = new HystrixMetricsStreamServlet();
        ServletRegistrationBean registrationBean = new ServletRegistrationBean(streamServlet);
        registrationBean.setLoadOnStartup(1);
        registrationBean.addUrlMappings("/hystrix.stream");
        registrationBean.setName("HystrixMetricsStreamServlet");
        return registrationBean;
    }
}

在这里插入图片描述

(5)先启动Eureka注册中心,再启动生产者,然后消费者,最后启动仪表盘,访问:http://localhost:9000/hystrix
在这里插入图片描述
(6)消费者开始发起请求,生产者开始处理请求,在仪表盘就可以看见:
在这里插入图片描述

测试一下熔断和服务降级(发送一些错误数据或者故意抛出一些Exception):

Circuit Closed 就表示断路器是关闭的,也就是服务可用,没有熔断。Open的话就表示开启了断路,走服务降级。那个点点,请求量越大,点点越大。
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/whiteBearClimb/article/details/108736891