熔断机制Hystrix

一、什么是Hystrix

1.Hystrix是一种保护机制;(豪猪)
2.Hystrix是一个组件;
3.Hystrix用于隔离访问远程服务,第三方库,防止出现级联失败;

二、Hystrix处理的问题

1.雪崩服务

微服务中服务之间调用关系错综很复杂,可能一个功能需要多个服务里面的功能协调完成,会形成一个复杂的链路;
在这里插入图片描述
当一个业务出现问题这个问题就会报错,所以需要处理一下;
服务支持的线程和并发数量有限,请求一直处于阻塞状态,会导致服务器上的资源耗尽,其他服务被打死;造成雪崩效应;

2.Hystrix解决雪崩的手段

1.线程隔离
1>通过空闲线程来访问资源服务,线程已满或者请求超时则会进行降级处理;
2>当服务无法访问不会出现服务崩溃,会收到一个提示;
3>请求失败但是线程不会阻塞,对其它服务不会造成威胁;
环境搭建
1.引入相对应的jar包

		<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
            <version>2.2.10.RELEASE</version>
        </dependency>

2.开启熔断服务@SpringCloudApplication集成熔断服务;
3.编写降级逻辑
我们改造consumer,当目标服务的调用出现故障,我们希望快速失败,给用户一个友好提示。因此需要提前编写好失败时的降级处理逻辑,要使用HystixCommond来完成

@DefaultProperties(defaultFallback = "fallBack")//全类配置
public class IssueController {
	@GetMapping("sta")
    @HystrixCommand//降级配置
    public ResultJson sta() {
        return new ResultJson(StatusCode.SUCCESS);
    }

    public ResultJson fallBack(){
        return new ResultJson(StatusCode.ERROR,"服务请求失败");
    }
 }

当我们需要全局配置的时间需要加上类上面加@DefaultProperties(defaultFallback = “fallBack”)

2.服务熔断
1.熔断状态
Closed:关闭状态,所有请求都正常访问。
Open:打开状态,所有请求都会被降级。Hystix会对请求情况计数,当一定时间内失败请求百分
比达到阈值,则触发熔断,断路器会完全打开。默认失败比例的阈值是50%,请求次数最少不低于
20次。
Half Open:半开状态,open状态不是永久的,打开后会进入休眠时间(默认是5S)。随后断路器
会自动进入半开状态。此时会释放部分请求通过,若这些请求都是健康的,则会完全关闭断路器,
否则继续保持打开,再次进行休眠计时

@DefaultProperties(defaultFallback = "fallBack")//全类配置
public class IssueController {
	@GetMapping("sta")
    @HystrixCommand//降级配置
    public ResultJson sta(Long id) {
    	if(id==1){
    		throw new XException("接口请求失败");
    	}
        return new ResultJson(StatusCode.SUCCESS);
    }

    public ResultJson fallBack(){
        return new ResultJson(StatusCode.ERROR,"服务请求失败");
    }
 }

当我们输入ID=1代码结果依旧是服务请求失败,进行降级处理;

三、feign里面使用降级处理

1.在Api里面@FeignClient中加入fallbackFactory = PoliceFallbackFactory.class
2.编写对应的降级服务

@Component
public class PoliceFallbackFactory implements FallbackFactory<PoliceApi> {
    private static final Logger log = LoggerFactory.getLogger(PoliceFallbackFactory.class);

    @Override
    public PoliceApi create(Throwable throwable) {
        log.error("Police服务调用失败");

        return new PoliceApi() {
            @Override
            public String syncVehicle(VehicleDto vehicleDto) {
                ResultJson resultJson = new ResultJson(StatusCode.ERROR,"车辆推送失败");
                return JSON.toJSONString(resultJson);
            }
        };
    }
}

feign:
circuitbreaker:
enabled: true
被调用者yml加入开启服务
3.要注意以前版本feign集成Hystrix,后面升级摒弃来,需要我们添加Hystrix的jar包;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值