转载

学习SpringCloud(3)断路器Hystrix

Hystrix特性

1.熔断

当HystrixCommand请求后端服务失败数量超过一定比例(默认50%), 断路器会切换到开路状态(Open). 这时所有请求会直接失败而不会发送到后端服务,断路器保持在开路状态一段时间后(默认5秒),自动切换到半开路状态(HALF-OPEN),这时会判断下一次请求的返回情况, 如果请求成功, 断路器切回闭路状态(CLOSED),否则重新切换到开路状态(OPEN)

2.Fallback(降级)

Fallback相当于是降级操作. 服务降级是指当请求后端服务出现异常的时候, 可以使用fallback方法返回的值.

3.资源隔离

将请求封装在HystrixCommand中,然后这些请求在一个独立的线程中执行,每个依赖服务维护一个小的线程池(或信号量),在调用失败或超时的情况下可以断开依赖调用或者返回指定逻辑.

4.限流

限流就是信号量隔离(一般不会使用该模式)

注册中心和服务提供者不需要改动,只需要改一下我们的consumer即可

配置文件加入配置:

#打开Feign的Hystrix熔断功能
feign:
  hystrix:
    enabled: true
复制代码

FeignClient调用服务:

@Component
@FeignClient(value = "spring-cloud-eureka-pro",fallback = FeignServiceHystrix.class)
public interface FeignService {
    @RequestMapping(value = "/hi")
    public String hiService(@RequestParam(value = "name") String name);
}

复制代码

Fallback 回调类:

@Component
public class FeignServiceHystrix implements FeignService{
    @Override
    public String hiService(@RequestParam(value = "name")String name) {
        return "hi" +name+", this is failed messge";
    }
}

复制代码

测试,首先启动注册中心,provider,consumer

学习SpringCloud(3)断路器Hystrix

访问consumer 的hi2方法

学习SpringCloud(3)断路器Hystrix

此时正常调用服务

将provider停掉,然后再次访问

学习SpringCloud(3)断路器Hystrix

由于此时启用了熔断功能,所以调用服务失败之后进入fallback

如果将熔断功能关闭的话,此时应该是返回调用异常的信息

#打开Feign的Hystrix熔断功能
feign:
  hystrix:
    enabled: false
复制代码
学习SpringCloud(3)断路器Hystrix

Hystrix能做什么?

  • 在通过第三方客户端访问(通常是通过网络)依赖服务出现高延迟或者失败时,为系统提供保护和控制

  • 在分布式系统中防止级联失败

  • 快速失败(Fail fast)同时能快速恢复

  • 提供失败回退(Fallback)和优雅的服务降级机制

  • 提供近实时的监控、报警和运维控制手段

原文  https://juejin.im/post/5d36d677f265da1ba3290598
正文到此结束
Loading...