[Spring Cloud] 4.3 Circuit Breaker : Hystrix Clients

4.3 Circuit Breaker: Hystrix Clients

断路器:Hystrix客户端

Netflix实现了一个断路器模式的类库叫做Hystrix。 在一个微服务架构中通常来说会有一个多层服务的调用。

imageFigure 1. Microservice Graph

对于用户来说,一个底层服务失败,就会引发一系列的连锁反应。当调用一个服务达到一个阈值(Hystrix默认是5秒内20次失败),断路器打开,并拒绝调用。开发者可以指定一些特定错误,来触发降级操作。

imageFigure 2. Hystrix fallback prevents cascading failures

断路器打开后,阻止了连锁反应并且允许丢弃或者等待服务重新响应。降级调用是Hystrix提供的另一种策略,比如提供一个静态数据或者一个合理的空值。 降级也可以链式触发,比如,一个服务降级可能引起另外一些业务调用得到一个降级的静态数据。

4.3.1 How to Include Hystrix 如何引入Hystrix

在工程中引入Hystrix只需要使用特定的starter就可以了。如:group:org.springframework.cloud,artifact id : spring-cloud-starter-hystrix。如何使用Spring Cloud构建系统可以参见 Spring Cloud Project page

例如:

@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是由Netfix开源的javanica提供的。

Spring Cloud 通过这个注解自动包装了一个代理去关联Hystrix断路器。 断路器提供对调用链路的断开和闭合控制,主要用于调用失败处理。

可以通过配置@HystrixCommandcommandProperties属性来列出一些列的@HystrixProperty,来对Hystrix断路器进行配置。详情见此处。详细的属性配置项说明可以参见Hystrix的Wiki

4.3.2 Propagating the Security Context or using Spring Scopes 安全上下文的传播机制或者Spring作用域配置

如果你想要让一些本地线程上下文传播到@HystrixCommand中,那么默认情况下是不行的,因为Hystrix是在一个普通的线程池中执行的。

你可以二选一来达到传播上下文的目的,要么配置Hystrix,让其使用同一个线程去处理调用;要么,干脆直接在注解中使用一个不同的隔离策略。例如:

@HystrixCommand(fallbackMethod = "stubMyService",
    commandProperties = {
      @HystrixProperty(name="execution.isolation.strategy", value="SEMAPHORE")
    }
)
...

同样的,如果你使用过@SessionScope或者@RequestScope。你就会知道你这样做是因为,运行时异常会找不到作用域的上下文。

你还可以配置hystrix.shareSecurityContexttrue。这样做,将会让Hystris自动配置一个并发策略插件,当使用Hystris命令从主线程迁移SecurityContext时自动同步。Hystris不允许多个并发策略同时存在,所以需要自己扩展一个HystrixConcurrencyStrategy注册到Spring中。Spring Cloud会自动在Spring上下文中发现你的实现类,并自动包装成一个自定义Hystrix插件。

4.3.3 Health Indicator 健康指示器

断路器的状态也可以通过/health接口被应用查看到。

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

4.3.4 Hystrix Metrics Stream Hystrix实时数据监控(这个说法可能不靠谱^_^)

开启流量测量需要引入依赖:spring-boot-starter-actuator。将会提供一个/hystrix.stream管理接口。

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

转载于:https://my.oschina.net/roccn/blog/796437

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值