springCloud:Hystirx 服务熔断,服务降级,Dashboard流监控(待更)

前言:

 在复杂分布式架构体系中,应用程序往往会有数十个依赖关系,而每个依赖关系在某些时候将不可避免的失败,造成当前服务不可用,而在高并发的环境下,当服务挂掉后,服务消费者依然在请求服务,这就会走造成当前服务的瘫痪,即便被重试唤醒,但面临堆积起来的大量服务请求,服务提供者会再次挂掉,这就是服务雪崩

 

服务雪崩~~>熔断机制

springCloud:Hystirx  服务熔断,服务降级,Dashboard流监控(待更)

 

 

 

Hystrix是什么

是一个对微服务架构中的异常进行处理一个中间件,如服务雪崩;提高了分布是系统的容错性,不会因为某些服务模块的挂掉而影响整个系统的正常运行

 

Hystrix作用

  • 基于命令模式的请求:解耦了请求者和接受者,使得发送出去的命令可以排队、异步执行。
  • 资源隔离:用ConcurrentHashMap绑定commandKey和线程池,当某个功能运行不稳定或有问题时,服务的其他部分不受影响。服务恢复比较快。
  • 熔断和服务降级:用ConcurrentHashMap绑定commandKey和HystrixCircuitBreaker类(断路器类),统计每次请求的结果并记录,根据结果判断是否开启断路器,自定义异常返回结果实现熔断降级。

 

一,服务熔断

@EnableCircuitBreaker  开启断路器,属于hystrix的包

springCloud:Hystirx  服务熔断,服务降级,Dashboard流监控(待更)

 

 1.导入依赖

        <!--Hystrix-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-hystrix</artifactId>
            <version>1.4.6.RELEASE</version>
        </dependency>

 

2.服务提供者controller层方法处加服务熔断注解,本质给方法加备选方案(当服务挂了,备选方案被调用)

@HystrixCommand(fallbackMethod = "备选方案方法名")

springCloud:Hystirx  服务熔断,服务降级,Dashboard流监控(待更)
//提供Restful服务
@RestController
public class DeptController {

    @Autowired
    private DeptService deptService;


    @GetMapping("/dept/get/{id}")
    @HystrixCommand(fallbackMethod = "hystrixGet")
    public Dept get(@PathVariable("id") Long id){
        Dept dept = deptService.queryById(id);

        if(dept == null){
            throw new RuntimeException("id=>"+id+"不存在该用户,或者信息无法找到~");
        }

        return dept;
    }


    //熔断版的(本质,备选方法)
    public Dept hystrixGet(@PathVariable("id") Long id) {
            return new Dept()
                    .setDeptno(id)
                    .setDname("id=>"+id+"不存在该用户,或者信息无法找到~")
                    .setDb_source("no this datasource in MySQL");

    }


}
View Code

 

3.主启动类开启熔断器

@EnableCircuitBreaker //开启断路器,属于hystrix的包

springCloud:Hystirx  服务熔断,服务降级,Dashboard流监控(待更)
@SpringBootApplication
@EnableDiscoveryClient //服务发现,企业级协同开发
@EnableEurekaClient  //开启eureka客户端,在服务启动后自动注册到指定的EurekaServer中
@EnableCircuitBreaker //开启断路器,属于hystrix的包
public class DeptProvider_8001 {
    public static void main(String[] args) {
        SpringApplication.run(DeptProvider_8001.class,args);
    }
}
View Code

 

上一篇:一文吃透如何部署kubernetes之Dashboard


下一篇:kubernetes 学习笔记---启动pods