zoukankan      html  css  js  c++  java
  • 0502-Hystrix保护应用-简介,使用,健康指标等

    一、概述

      参看地址:https://cloud.spring.io/spring-cloud-static/Edgware.SR3/single/spring-cloud.html#_circuit_breaker_hystrix_clients

      源码wiki:https://github.com/Netflix/Hystrix/wiki

      Netflix创建了一个名为Hystrix的库,实现断路器模式。在微服务体系结构中,通常有多层服务调用。

      较低级别的服务中的服务故障可能导致级联故障直至用户。当对特定服务的调用大于CurrBurnReal.RealStestMultRESHOLD(默认值:20请求)和故障率大于TraceBurror.Error阈值百分比(默认值:50%)在MultICC.LoLink StutsTimeMimLimeDS(默认值:10秒)定义的滚动窗口中,电路断开,不进行调用。在发生错误和开路的情况下,开发者可以提供fallback。

      

      开放的电路可以防止级联失败,并允许服务自我恢复。回退可以是Hystrix另一个受保护的调用,静态数据或一个空值。回退可能会是链,因此第一次回退会导致其他业务呼叫转而回退到静态数据。

    二、使用

    2.1、hystrix-javanica简介

      源码地址:https://github.com/Netflix/Hystrix/tree/master/hystrix-contrib/hystrix-javanica

      与其他语言(如反射和注释)相比,Java语言具有很大的优势。所有现代框架,如Spring,Hibernate,myBatis等都力求最大限度地利用这些优势。在Hystrix中引入注释的想法是改进的明显解决方案。目前使用Hystrix涉及编写大量代码,这是快速开发的障碍。您可能花费大量时间编写Hystrix命令。通过引入支持注释,Javanica项目的构想更容易使用Hystrix。

      简化了Hystrix使用

    2.2、使用

      @HystrixCommand由一个名为“javanica”的Netflix contrib库提供。Spring Cloud会自动将带有该注释的Spring bean包装在连接到Hystrix断路器的代理中。断路器计算何时打开和关闭电路,以及在发生故障时应采取的措施。

      要配置@HystrixCommand,您可以使用带有@HystrixProperty注释列表的commandProperties属性

    1、pom引用

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

    2、启动类增加如下注解

    @EnableCircuitBreaker

    3、在调用方法增加注解以及fallback方法

    @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 */;
        }
    }

    注意点:

    1、fallbackMethod 必须是定义的方法

    2、defaultStores 方法参数返回值与注解 HystrixCommand标记的一致

    3、在发生问题后,会经过defaultStores处理。

    三、其他

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

      如果你想要一些线程本地上下文传播到@HystrixCommand,默认声明将不起作用,因为它在线程池中执行命令(在超时的情况下)。您可以使用某种配置将Hystrix切换为与调用方使用相同的线程,或者直接在注释中请求它使用不同的“隔离策略”。

      参看地址:https://github.com/Netflix/Hystrix/wiki/Configuration#command-properties

      execution.isolation.strategy:该属性指示HystrixCommand.run()执行的隔离策略,以下两种选择之一:

        THREAD - 它在单独的线程上执行,并发请求受线程池中线程数的限制

        SEMAPHORE - 它在调用线程上执行,并发请求受信号计数限制

      缺省值和建议的设置是使用线程隔离(THREAD)和使用信号量隔离(SEMAPHORE)的HystrixObservableCommands运行HystrixCommands。

      使用在对应的方法上增加

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

      如果使用@SessionScope或@RequestScope,则同样适用。您将知道何时需要执行此操作,因为运行时异常表示无法找到范围内的上下文。

      【1.2开始】您也可以选择将hystrix.shareSecurityContext属性设置为true。这样做会自动配置一个Hystrix并发策略插件钩子,他可以将SecurityContext从主线程传输到Hystrix命令使用的钩子。Hystrix不允许注册多个hystrix并发策略,因此通过将自己的HystrixConcurrencyStrategy声明为Spring bean,可以使用扩展机制。Spring Cloud将在Spring上下文中查找您的实现,并将其包装在自己的插件中。【一般是出异常,出问题才需配置】

      参看文章:https://github.com/spring-cloud/spring-cloud-netflix/issues/1330https://github.com/spring-cloud/spring-cloud-netflix/issues/1336

    3.1.1、Scope  

      Scope描述的是Spring容器如何新建Bean实例的。Spring的Scope有以下几种,通过@Scope注解来实现。

      (1)Singleton:一个Spring容器中只有一个Bean的实例,此为Spring的默认配置,全容器共享一个实例。

      (2)Prototype:每次调用新建一个Bean实例。

      (3)Request:Web项目中,给每一个 http request 新建一个Bean实例。

      (4)Session:Web项目中,给每一个 http session 新建一个Bean实例。

      (5)GlobalSession:这个只在portal应用中有用,给每一个 global http session 新建一个Bean实例。

    3.2、健康指标

      连接断路器的状态也暴露在呼叫应用程序的/ health端点中。

      访问地址:http://localhost:8761/health

    可查看如下

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

    此时可以断掉服务提供方,稍后查看

    断路器打开

    其中health的查看,需要添加

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

    3.3、Hystrix度量流

      启用Hystrix指标流包括对弹簧启动启动器执行器的依赖。这会将/hystrix.stream公开为管理端点。访问具体接口,能够查看消息

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

    后期可以使用Dashboard查看

    同样Feign也支持Hystrix

    代码地址:https://github.com/bjlhx15/spring-cloud/tree/master/microservice-comsumer-movie-ribbon-with-hystrix 

  • 相关阅读:
    Window 窗口类
    使用 Bolt 实现 GridView 表格控件
    lua的table库
    Windows编程总结之 DLL
    lua 打印 table 拷贝table
    使用 xlue 实现简单 listbox 控件
    使用 xlue 实现 tips
    extern “C”
    COleVariant如何转换为int double string cstring
    原来WIN32 API也有GetOpenFileName函数
  • 原文地址:https://www.cnblogs.com/bjlhx/p/8903838.html
Copyright © 2011-2022 走看看