spring cloud2.0学习笔记-断路器(Circuit Breaker)

本文介绍了Spring Cloud 2.0中如何使用Hystrix实现断路器,防止微服务雪崩。内容涵盖断路器开启的条件,如在设定时间窗口内请求次数超过阈值且调用失败率大于特定百分比。通过@HystrixCommand注解创建断路器实例,并讨论了如何传递线程上下文信息。同时,讲述了如何通过健康端点检查断路器状态及开启断路器度量流。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

介绍

Netflix通过Hystrix库实现了断路器模式,在微服务架构体系中存在多层调用的,低级的服务故障可能会导致级联故障,断路器可以有效保护微服务,防止出现雪崩效应。

断路器开启的条件

  • 在定义的时间窗口内,默认10s(metrics.rollingStats.timeInMilliseconds)
  • 某服务被请求次数超过阈值,默认20次(circuitBreaker.requestVolumeThreshold)
  • 调用失败率大于阈值,默认>50%(circuitBreaker.errorThresholdPercentage)

基于@HystrixCommand注解的断开器实例

  • 简单应用
@SpringBootApplication
@EnableCircuitBreaker
public class Application {

    public static void main(String[] args) {
        new SpringApplicationBuilder(Application.class).web(true).run(args);
    }
}

@Component
public class StoreIntegration {

    @HystrixCommand(fallbackMethod = "defaultStores")
    public Object getStores(Map<String, Object> parameters) {
        //do stuff that might fail
    }

    public Object defaultStores(Map<String, Object> parameters) {
        return /* something useful */;
    }
}
  • 安全信息的传播
    如果你试图将本地线程中的上下文信息传播到@HystrixCommand注解的方法中,是不能正常运行的,因为默认是线程隔离的,只能操作同一个线程的上下文信息。包括类加了 @SessionScope or @RequestScope注解也是一样的。
@HystrixCommand(fallbackMethod = "stubMyService",
    commandProperties = {
      @HystrixProperty(name="execution.isolation.strategy", value="SEMAPHORE")
    }
)

你可以通过配置如下参数,Hystrix会自动将上下文传递给@HystrixCommand注解的方法中。

hystrix.shareSecurityContext=true

断路器状态查看

可以通过健康端点来查看断路器状态,端点路径/actuator/health/health,内容如下:

{
    "hystrix": {
        "openCircuitBreakers": [
            "StoreIntegration::getStoresByLocationLink"
        ],
        "status": "CIRCUIT_OPEN"
    },
    "status": "UP"
}

开启断路器度量流

  • 依赖:spring-boot-starter-actuator
  • 配置:management.endpoints.web.exposure.include: hystrix.stream
  • 访问:/actuator/hystrix.stream
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值