Hystrix熔断器-Netflix03


一、Hystrix熔断器

1. 雪崩效应

雪崩效应是指在一个系统中,当某个组件或节点发生故障或失效时,其影响会逐渐扩散并导致其他组件或节点也相继发生故障或失效,最终导致整个系统崩溃的现象。这种效应类似于雪崩时雪坡上的雪一片片地崩落,最终形成大规模的雪崩。

2. 什么是Hystrix?

Hystrix通过将每个服务调用封装在一个独立的线程中,并为每个服务调用设置超时时间和容错策略,以防止由于某个服务调用的故障或延迟导致整个系统的阻塞,避免雪崩效应。当某个服务调用失败时,Hystrix会快速失败并服务降级,返回一个备用的响应,而不会等待超时。

此外,Hystrix还提供了实时的监控和统计功能,可以用于监测系统的健康状况和性能指标,并通过仪表盘展示给开发人员和运维人员。

3. Hystrix功能介绍

  1. 故障隔离(Fault Isolation):Hystrix使用线程池隔离每个服务调用,使得一个服务调用的故障不会影响到其他服务调用。这种隔离可以防止故障的扩散,提高系统的稳定性。

  2. 熔断(Circuit Breaker):Hystrix通过熔断机制来防止故障的持续发生。当某个服务调用的故障率超过设定的阈值时,Hystrix会自动打开熔断器,后续的请求将被快速失败,而不会继续尝试调用该服务,从而避免资源的浪费和系统的崩溃。

  3. 降级(Fallback):Hystrix提供了降级机制,当某个服务调用失败或超时时,可以通过指定备用的逻辑进行降级处理,返回一个预先定义好的默认响应,保证系统的可用性。

  4. 限流(Concurrency Limiting):Hystrix可以对服务调用进行限流,通过设定最大并发数来控制系统的负载,避免过多的请求导致系统资源耗尽。

  5. 实时监控和统计(Metrics Monitoring):Hystrix提供了实时监控和统计功能,可以收集和展示系统的健康状况和性能指标,如请求的成功率、失败率、响应时间等,帮助开发人员和运维人员及时发现和解决问题。

  6. 缓存:Hystrix的缓存功能可以实现在同一请求的多次调用中共享结果,从而减少对下游系统的请求次数,提高系统性能。

4. Hystrix的工作机制

客户端发起服务调用,在执行服务调用之前,Hystrix会先检查熔断器的状态,如果是关闭状态,服务调用会正常执行;如果熔断器处于打开状态,服务调用会被快速失败和服务降级,直接返回一个预先定义好的默认响应;

一段时间以后(withCircuitBreakerSleepWindowInMilliseconds=5s),保护器会尝试进入半熔断状态(Half-Open),允许少量请求进来尝试,如果这些请求成功返回结果,Hystrix会将电路关闭,恢复到正常状态(Closed)。如果这些请求仍然失败或超时,Hystrix会重新打开电路,继续保持熔断状态。

二、实战

1. 导入依赖

springcloud-parent下的springcloud-order-server子项目导入Hystrix依赖,和Ribbon配合使用;
注意:可以不用导包,在spring-cloud-starter-netflix-eureka-client包中已经存在:

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

2. 配置类开启Hystrix

主配置类通过 @EnableCircuitBreaker 标签开启熔断功能,默认开启,可不写:

@SpringBootApplication
@EnableEurekaClient
@EnableCircuitBreaker       //开启Hystrix熔断
public class OrderServerApplication {
    //配置一个RestTemplate ,Spring封装的一个Restful风格的http客户端 工具
    @Bean
    @LoadBalanced //开启负载均衡
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
    public static void main( String[] args ) {
        SpringApplication.run(OrderServerApplication.class);
    }
}

3. OpenFeign使用Hystrix

通过feign.hystrix.enabled=true开启Hystrix:

feign:
  hystrix:
    enabled: true #开启熔断支持
ribbon:
  ReadTimeout: 1000 #请求处理的超时时间
  SocketTimeout: 1000
  ConnectTimeout: 1000 #请求连接的超时时间
hystrix:
  command:
    default:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 4000 #hystrix超时,置thread和semaphore两种隔离策略的超时时间

4. Fiegn接口熔断-fallbackFactory方式

springcloud-pay-server项目中新建:
UserFeignClient 接口:

//Feign根据服务名能够在注册中心找到目标服务的通信地址
@FeignClient(value = "user-server",fallbackFactory = UserFeignClientFallback.class)
public interface UserFeignClient {
    @RequestMapping(value = "/user/{id}",method = RequestMethod.GET)
    User getById(@PathVariable("id")Long id);
}

编写托底类,工程方式的托底类需要去实现 FallbackFactory接口 ,并指定泛型为“”Feign客户端接口(UserFeignClient )。:

@Component
public class UserFeignClientFallback implements FallbackFactory<UserFeignClient> {
    @Override
    public UserFeignClient create(Throwable throwable) {
        return new UserFeignClient() {
            @Override
            public User getById(Long id) {
                //打印错误信息到控制台
                throwable.printStackTrace();
                //降级
                return new User(-1L,"","系统繁忙,请稍后重试");
            }
        };
    }
}

5. 启动测试

启动 springcloud-eureka-serverspringcloud-user-serverspringcloud-pay-server ; 访问:http://localhost:8761/pay/1 观察浏览器是否正常拿到结果,然后关闭 springcloud-user-server工程,观察浏览器是否返回托底数据。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值