转载

Spring Cloud 参考文档(断路器:Hystrix客户端)

断路器:Hystrix客户端

Netflix创建了一个名为 Hystrix 的库,用于实现 断路器模式 ,在微服务架构中,通常有多层服务调用,如以下示例所示:

较低级别的服务中的服务故障可能导致级联故障一直到用户,当对特定服务的调用超过 circuitBreaker.requestVolumeThreshold (默认值:20个请求)并且在 metrics.rollingStats.timeInMilliseconds (默认值:10秒)定义的滚动窗口中,失败百分比大于 circuitBreaker.errorThresholdPercentage (默认值:> 50%)时,电路打开,没有调用,在出现错误和开路的情况下,开发人员可以提供回退。

Spring Cloud 参考文档(断路器:Hystrix客户端)

拥有一个开放的电路可以停止级联故障,并允许过载或故障服务有时间恢复,回退可以是另一个受Hystrix保护的调用、静态数据或合理的空值,回退可以被链接,以便第一个回退执行一些其他业务调用,而这些业务调用又反过来回退到静态数据。

如何包含Hystrix

要在项目中包含Hystrix,请使用组ID为 org.springframework.cloud 和工件ID为 spring-cloud-starter-netflix-hystrix 的启动器。

以下示例显示了具有Hystrix断路器的最小Eureka服务器:

@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 由名为“ javanica ”的Netflix contrib库提供,Spring Cloud在连接到Hystrix断路器的代理中自动包装带有该注解的Spring bean,断路器计算何时打开和关闭电路以及在发生故障时应采取的措施。

要配置 @HystrixCommand ,可以将 commandProperties 属性与 @HystrixProperty 注解列表一起使用,有关详细信息,请参见 此处 ,有关可用属性的详细信息,请参阅 Hystrix wiki 。

传播安全上下文或使用Spring Scopes

如果希望某些线程本地上下文传播到 @HystrixCommand ,则默认声明不起作用,因为它在线程池中执行该命令(在超时的情况下),你可以通过配置或直接在注解中切换Hystrix以使用与调用者相同的线程,方法是让它使用不同的“隔离策略”,以下示例演示如何在注解中设置线程:

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

如果你使用 @SessionScope@RequestScope ,则同样适用,如果遇到运行时异常,表示无法找到作用域上下文,则需要使用相同的线程。

你还可以选择将 hystrix.shareSecurityContext 属性设置为 true ,这样做会自动配置Hystrix并发策略插件挂钩,将 SecurityContext 从主线程传输到Hystrix命令使用的线程。Hystrix不会注册多个Hystrix并发策略,因此可以通过将自己的 HystrixConcurrencyStrategy 声明为Spring bean来实现扩展机制,Spring Cloud在Spring上下文中查找你的实现,并将其包装在自己的插件中。

健康指示器

连接断路器的状态也暴露在调用应用程序的 /health 端点中,如以下示例所示:

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

Hystrix指标流

要启用Hystrix指标流,请包含对 spring-boot-starter-actuator 的依赖关系并设置 management.endpoints.web.exposure.include: hystrix.stream ,这样做会将 /actuator/hystrix.stream 公开为管理端点,如以下示例所示:

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

Hystrix仪表板

Hystrix的主要好处之一是它收集了关于每个HystrixCommand的指标集,Hystrix仪表板以高效的方式显示每个断路器的健康状况。

Spring Cloud 参考文档(断路器:Hystrix客户端)

原文  https://segmentfault.com/a/1190000018892601
正文到此结束
Loading...