3.断路器:Hystrix客户端.md

3.断路器:Hystrix客户端

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

图3.1。微服务图

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

图3.2。Hystrix回退可防止级联故障

开放式电路可以阻止级联故障,并且可以让不知所措或失败的服务有时间恢复。回退可以是另一个受Hystrix保护的调用,静态数据或合理的空值。可以链接回退,以便第一个回退进行一些其他业务调用,这反过来又回到静态数据。

3.1如何包含Hystrix

要在项目中包含Hystrix,请使用组ID为ID org.springframework.cloud 且工件ID为的启动器spring-cloud-starter-netflix-hystrix。有关使用当前Spring Cloud Release Train设置构建系统的详细信息,请参阅Spring Cloud Project页面。

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

@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。

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

如果您希望某些线程本地上下文传播到a @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上下文中查找您的实现并将其包装在自己的插件中。

3.3健康指标

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

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

3.4 Hystrix指标流

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

<dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-actuatorartifactId>
dependency>

你可能感兴趣的:(java)