摘要:以下示例显示了具有断路器的最小服务器由名为的库提供,在连接到断路器的代理中自动包装带有该注解的,断路器计算何时打开和关闭电路以及在发生故障时应采取的措施。上一篇服务发现下一篇超时和客户端
断路器:Hystrix客户端
Netflix创建了一个名为Hystrix的库,用于实现断路器模式,在微服务架构中,通常有多层服务调用,如以下示例所示:
较低级别的服务中的服务故障可能导致级联故障一直到用户,当对特定服务的调用超过circuitBreaker.requestVolumeThreshold(默认值:20个请求)并且在metrics.rollingStats.timeInMilliseconds(默认值:10秒)定义的滚动窗口中,失败百分比大于circuitBreaker.errorThresholdPercentage(默认值:> 50%)时,电路打开,没有调用,在出现错误和开路的情况下,开发人员可以提供回退。
拥有一个开放的电路可以停止级联故障,并允许过载或故障服务有时间恢复,回退可以是另一个受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(Mapparameters) { //do stuff that might fail } public Object defaultStores(Map 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公开为管理端点,如以下示例所示:
Hystrix仪表板org.springframework.boot spring-boot-starter-actuator
Hystrix的主要好处之一是它收集了关于每个HystrixCommand的指标集,Hystrix仪表板以高效的方式显示每个断路器的健康状况。
上一篇:服务发现:Eureka Server 下一篇:Hystrix超时和Ribbon客户端文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/74144.html
摘要:要运行仪表板,请使用注解主类,然后访问并将仪表板指向客户端应用程序中的单个实例的端点。连接到使用的端点时,必须信任服务器使用的证书,如果证书不受信任,则必须将证书导入,以便仪表板成功连接到流端点。 Hystrix超时和Ribbon客户端 使用包装Ribbon客户端的Hystrix命令时,要确保将Hystrix超时配置为长于配置的Ribbon超时,包括可能进行的任何可能的重试,例如,如果...
摘要:在该配置中,加入这个方法的话,表明使用了该配置的地方,就会禁用该模块使用容灾降级的功能添加访问层添加电影微服务启动类电影微服务,定制,一个功能禁用,另一个功能启用。 SpringCloud(第 016 篇)电影微服务,定制Feign,一个Feign功能禁用Hystrix,另一个Feign功能启用Hystrix - 一、大致介绍 1、在一些场景中,部分功能需要使用断路器功能,部分功能不需...
摘要:继承支持通过单继承接口支持样板,这允许将通用操作分组为方便的基本接口。,记录基本信息以及请求和响应。例如,类定义参数和以下客户端使用注解使用类 声明式REST客户端:Feign Feign是一个声明式的Web服务客户端,它使编写Web服务客户端变得更容易,要使用Feign,请创建一个接口并对其进行注解,它具有可插拔的注解支持,包括Feign注解和JAX-RS注解,Feign还支持可插拔...
摘要:多层服务调用常见于微服务架构中较底层的服务如果出现故障,会导致连锁故障。 Spring Cloud 体验 简介 Spring Cloud为开发人员提供了快速构建分布式系统的一些工具,包括配置管理、服务发现、断路器、路由、微代理、 事件总线、全局锁、决策竞选、分布式会话等等 基于Spring Boot,Spring Cloud将各公司成熟服务框架组合起来,通过Spring Boo...
摘要:断路器本身是一种开关装置,用于在电路上保护线路过载,当线路中有电器发生短路时,断路器能够及时的切断故障电路,防止发生过载发热甚至起火等严重后果。具备拥有回退机制和断路器功能的线程和信号隔离,请求缓存和请求打包,以及监控和配置等功能。 转载请注明出处 http://www.paraller.com 代码机制:熔断 & Fallback & 资源隔离 熔断 概念: 在微服务架构中,我们将系...
阅读 3378·2021-10-08 10:15
阅读 5290·2021-09-23 11:56
阅读 1410·2019-08-30 15:55
阅读 425·2019-08-29 16:05
阅读 2709·2019-08-29 12:34
阅读 2013·2019-08-29 12:18
阅读 856·2019-08-26 12:02
阅读 1626·2019-08-26 12:00