spring cloud Hystrix断路器的使用(熔断器)

1.Hystrix客户端

Netflix已经创建了一个名为Hystrix的库,实现了断路器的模式。在microservice架构通常有多个层的服务调用。

低水平的服务的服务失败会导致级联故障一直给到用户。当调用一个特定的服务达到一定阈值(默认5秒失败20次),打开断路器。在错误的情况下和一个开启的断路回滚应可以由开发人员提供。

有一个断路器阻止级联失败并且允许关闭服务一段时间进行愈合。回滚会被其他hystrix保护调用,静态数据或健全的空值。
代码如下:

@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是由Netflix contrib 库提供,叫做javanica。spring cloud自动包装Spring bean与注释的代理连接到Hystrix断路器。断路器计算何时打开和关闭断路,并在失败的情况下做什么。

配置@HystrixCommand可以使用commandProperties属性的列表@HystrixProperty注释。详细请看https://github.com/Netflix/Hystrix/tree/master/hystrix-contrib/hystrix-javanica#configuration
https://github.com/Netflix/Hystrix/wiki/Configuration

1.1 传播安全上下文或者使用spring范围

如果你想要一些线程本地上下文传播到@HystrixCommand默认声明将不会工作,因为它执行线程池中的命令(在超时的情况下)。

可以切换Hystrix使用一些配置用相同的线程调用者,或直接在注释,让它使用不同的“隔离策略”(Isolation Strategy)。

例如:

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

详细内容请参考https://github.com/Netflix/Hystrix/wiki/Configuration

1.2 健康监控

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

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

1.3 Hystrix Metrics Stream(hystrix指标流)

spring-boot-starter-actuator中实现了Hystrix metrics stream。暴露/hystrix.stream作为一个管理端点。

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

2.Hystrix dashboard

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

运行Hystrix仪表板需要在spring boot主类上标注@EnableHystrixDashboard。然后访问/ hystrix查看仪表盘,在hystrix客户端应用使用/hystrix.stream监控。

2.1 turbine

看一个实例Hystrix数据对于整个系统的健康不是很有用。turbine是一个应用程序,该应用程序汇集了所有相关的/hystrix.stream端点到 /turbine.stream用于Hystrix仪表板。运行turbine使用@EnableTurbine注释你的主类,使用spring-cloud-starter-turbine这个jar。配置请参考https://github.com/Netflix/Turbine/wiki/Configuration-(1.x)

唯一的区别是turbine.instanceUrlSuffix不需要端口号前缀,因为这是自动处理,除非turbine.instanceInsertPort = false。

turbine.appConfig配置是一个eureka服务ID列表,turbine将使用这个配置查询实例。turbine stream在hystrix dashboard中使用如下的url配置:

http://my.turbine.server:8080/turbine.stream?cluster=,如果集群的名称是default,集群参数可以忽略)。这个集群参数必须和turbine.aggregator.clusterConfig匹配。从eureka返回的值都是大写的,因此我们希望下面的例子可以工作,如果一个app使用eureka注册,并且被叫做customers:

turbine:
 aggregator:
  clusterConfig: CUSTOMERS
 appConfig: customers

clusterName可以使用SPEL表达式定义,在turbine.clusterNameExpression。

默认值是appName,意思是eureka服务ID最终将作为集群的key,例如customers的InstanceInfo有一个CUSTOMERS的appName。另外一个例子是turbine.clusterNameExpression=aSGName,将从AWS ASG name获取集群名称。

另一个例子:

turbine:
 aggregator:
  clusterConfig: SYSTEM,USER
 appConfig: customers,stores,ui,admin
 clusterNameExpression: metadata['cluster']

在这种情况下,集群名称从4个服务从其元数据映射,期望包含“SYSTEM”和“USER”。

所有的app使用default,你需要一个文字表达式(使用单引号):

turbine:
 appConfig: customers,stores
 clusterNameExpression: 'default'

spring cloud提供一个spring-cloud-starter-turbine,所有依赖项你需要运行一个turbine服务器。使用@EnableTurbine创建一个spring boot应用。

2.2 turbine AMQP

在某些环境中(如在PaaS),典型的turbine模型的指标从所有分布式Hystrix命令不起作用。在这种情况下,你可能想要你Hystrix命令推动指标turbine,和spring cloud,就要使用AMQP消息传递。所有您需要做的是在客户端添加一个依赖spring-cloud-netflix-hystrix-amqp并确保代rabbitmq可用。(有关详细信息,请参阅弹簧引导文档如何配置客户端凭据,但它应该工作的当地代理或云计算)。

hystrix相关的其他文章:

hystrix缓存功能的使用:https://www.jb51.net/article/145855.htm

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • springcloud 熔断器Hystrix的具体使用

    说起springcloud熔断让我想起了去年股市中的熔断,多次痛的领悟,随意实施的熔断对整个系统的影响是灾难性的,好了接下来我们还是说正事. 熔断器 雪崩效应 在微服务架构中通常会有多个服务层调用,基础服务的故障可能会导致级联故障,进而造成整个系统不可用的情况,这种现象被称为服务雪崩效应.服务雪崩效应是一种因"服务提供者"的不可用导致"服务消费者"的不可用,并将不可用逐渐放大的过程. 如果下图所示:A作为服务提供者,B为A的服务消费者,C和D是B的服务消费者.A不可

  • SpringCloud之熔断器Hystrix的实现

    前言 SpringCloud 是微服务中的翘楚,最佳的落地方案. 在微服务架构中多层服务之间会相互调用,如果其中有一层服务故障了,可能会导致一层服务或者多层服务 故障,从而导致整个系统故障.这种现象被称为服务雪崩效应. SpringCloud 中的 Hystrix 组件就可以解决此类问题,Hystrix 负责监控服务之间的调用情况,连续多次失败的 情况进行熔断保护.保护的方法就是使用 Fallback,当调用的服务出现故障时,就可以使用 Fallback 方法的 返回值:Hystrix 间隔时间

  • spring cloud Hystrix断路器的使用(熔断器)

    1.Hystrix客户端 Netflix已经创建了一个名为Hystrix的库,实现了断路器的模式.在microservice架构通常有多个层的服务调用. 低水平的服务的服务失败会导致级联故障一直给到用户.当调用一个特定的服务达到一定阈值(默认5秒失败20次),打开断路器.在错误的情况下和一个开启的断路回滚应可以由开发人员提供. 有一个断路器阻止级联失败并且允许关闭服务一段时间进行愈合.回滚会被其他hystrix保护调用,静态数据或健全的空值. 代码如下: @SpringBootApplicati

  • 详解Spring Cloud Hystrix断路器实现容错和降级

    简介 Spring cloud提供了Hystrix容错库用以在服务不可用时,对配置了断路器的方法实行降级策略,临时调用备用方法.这篇文章将创建一个产品微服务,注册到eureka服务注册中心,然后我们使用web客户端访问/products API来获取产品列表,当产品服务故障时,则调用本地备用方法,以降级但正常提供服务. 基础环境 JDK 1.8 Maven 3.3.9 IntelliJ 2018.1 Git:项目源码 添加产品服务 在intelliJ中创建一个新的maven项目,使用如下配置 g

  • Spring Cloud Hystrix 服务容错保护的原理实现

    一.Hystrix 是什么 ​ 在微服务架构中,我们将系统拆分成了若干弱小的单元,单元与单元之间通过HTTP或者TCP等方式相互访问,各单元的应用间通过服务注册与订阅的方式相互依赖.由于每个单元都在不同的进程中运行,依赖 远程调用 的方式执行,这样就可能引起因为网速变慢或者网络故障导致请求变慢或超时,若此时调用方的请求在不断增加,最后就会因等待出现故障的依赖方响应形成任务积压,最终导致自身服务的瘫痪. ​ Hystrix 是Netflix 中的一个组件库,它隔离了服务之间的访问点,阻止了故障节点

  • Spring Cloud Hystrix入门和Hystrix命令原理分析

    断路由器模式 在分布式架构中,当某个服务单元发生故障之后,通过断路由器的故障监控(类似熔断保险丝),向调用方返回一个错误响应,而不是长时间的等待.这样就不会使得线程因调用故障服务被长时间占用不释放,避免了故障在分布式系统中的蔓延. Spring Cloud Hystrix针对上述问题实现了断路由器.线程隔离等一系列服务保护功能.它是基于Netflix Hystrix实现,该框架的目标在于通过控制那些访问远程系统.服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力. Hystrix具备服务

  • Spring Cloud Hystrix异常处理方法详解

    这篇文章主要介绍了Spring Cloud Hystrix异常处理方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在调用服务执行HsytrixCommand实现的run()方法抛出异常时,除HystrixBadRequestException之外,其他异常都会认为是Hystrix命令执行失败并触发服务降级处理逻辑. 异常处理 当Hystrix命令因为异常(除了HystrixBadRequestException异常)进入服务降级逻辑之后

  • spring cloud hystrix 超时时间使用方式详解

    我们在使用后台微服务的时候,各个服务之前会有很多请求和交叉业务.这里会引起雪崩.超时等异常处理.SpringCloud Hystrix服务降级.容错机治理使 hystrix 有很好的支持,引入后实现断路器功能. 1:pom 引入jar包 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</a

  • Spring Cloud Hystrix的基本用法大全

    目录 1. Hystrix的简单使用 1.1 服务降级 1.2 服务熔断 2. OpenFeign集成Hystrix 3. Hystrix熔断原理 3.1 熔断状态 3.2 熔断的工作原理 4. 代码地址 本文主要讲述Hystrix,也可以称之为豪猪哥. 它是Spring Cloud中集成的一个组件,在整个生态中主要为我们提供以下功能: 服务隔离 服务隔离主要包括线程池隔离以及信号量隔离. 服务熔断 当请求持续失败的时候,服务进行熔断,默认熔断5S,也是就说在这5S内的请求一律拒绝. 服务降级

  • Spring Cloud Hystrix 线程池队列配置(踩坑)

    背景: 有一次在生产环境,突然出现了很多笔还款单被挂起,后来排查原因,发现是内部系统调用时出现了Hystrix调用异常.在开发过程中,因为核心线程数设置的比较大,没有出现这种异常.放到了测试环境,偶尔有出现这种情况,后来在网上查找解决方案,网上的方案是调整maxQueueSize属性就好了,当时调整了一下,确实有所改善.可没想到在生产环境跑了一段时间后却又出现这种了情况,此时我第一想法就是去查看maxQueueSize属性,可是maxQueueSize属性是设置值了.当时就比较纳闷了,为什么ma

  • 详解spring cloud hystrix缓存功能的使用

    hystrix缓存的作用是 - 1.减少重复的请求数,降低依赖服务的返回数据始终保持一致. - 2.==在同一个用户请求的上下文中,相同依赖服务的返回数据始终保持一致==. - 3.请求缓存在run()和construct()执行之前生效,所以可以有效减少不必要的线程开销. 1 通过HystrixCommand类实现 1.1 开启缓存功能 继承HystrixCommand或HystrixObservableCommand,覆盖getCacheKey()方法,指定缓存的key,开启缓存配置. im

  • 详解spring cloud hystrix请求缓存(request cache)

    hystrix支持将一个请求结果缓存起来,下一个具有相同key的请求将直接从缓存中取出结果,减少请求开销.要使用该功能必须管理HystrixRequestContext,如果请求B要用到请求A的结果缓存,A和B必须同处一个context.通过HystrixRequestContext.initializeContext()和context.shutdown()可以构建一个context,这两条语句间的所有请求都处于同一个context,当然这个管理过程可以通过自定义的filter来实现,参考上一

随机推荐