springcloud熔断机制

springcloud熔断机制

1、为什么要有熔断机制

由于网络原因或者自身服务的原因,导致服务可能会产生故障或者是不可用,如果此服务生产故障,就会导致请求此服务的线程阻塞,如果涉及大量的线程请求阻塞,就进一步导致容器产生瘫痪,也会导致其它服务不可用,就会产生“雪崩效应”。因此需要一种机制处理,此机制就是“断路器”

2、什么雪崩效应

在微服务架构中,可能因为某一个基础服务故障,而导致多个服务之间的调用,出现阻塞,无法调用,一环扣一环,导致所有服务不可用,我们称这效应为雪崩效应。

3、什么是熔断

服务熔断就是对该服务的调用执行熔断,对应后续请求,不在继续调用该目标服务,而是直接返回,从而可以快速释放资源,或者服务出现故障,会把故障信息返回给客户端

4、触发熔断的条件

  • 当请求服务失败的次数超过一定的比例(默认50%),熔断就会生效
  • 熔断默认持续时间5秒,5秒之后它就会从(开路状态---》半开路状态)
  • 处于半开路状态,判断下一次请求,是否成功,如果成功,则切回到闭路状态

5、降级服务

当熔断机制启动,此服务不可用,直接返回失败,它会有一个响应机制处理:调用降级服务的响应方法实现

6、熔断降级实现

熔断降级机制作用在客户端,在服务消费端实现

6.1、导入依赖

<!--支持hystrix组件-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>

6.2、定义应急方法

业务层使用feign实现,不用写实现类,所以应急方法在控制器指定;如果使用RestTemplate实现,应急方法在业务层实现类指定

package com.yl.controller;

import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import com.netflix.hystrix.strategy.concurrency.HystrixRequestContext;
import com.yl.bean.User;
import com.yl.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {
    @Autowired
    private IUserService userService;

    @RequestMapping("/testHyStrix01")
    @HystrixCommand(fallbackMethod = "testHyStrix01FallBack")//指定应急方法
    public String testHyStrix01(){
        return userService.testHyStrix01();
    }

    String testHyStrix01FallBack(){
        return "请求服务不可用了,不要再来了";
    }

}

配置了熔断降级启动类上要添加@EnableHystrix注解

记得快乐
原文地址:https://www.cnblogs.com/Y-wee/p/14130693.html