Spring Cloud Document翻译(六)--断路器:Hystrix客户端

11 篇文章 0 订阅

 

13.断路器:Hystrix客户端

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

图13.1。微服务图

 

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

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

 

HystrixFallback.png

断路可以阻止级联故障,并使服务不堪重负或无法恢复。降级服务可以是另一个受Hystrix保护的调用,静态数据或合理的空值。降级服务可以形成一个链,以便第一个降级服务调用其他一些业务调用,也可能返回一些静态数据。

13.1如何包含Hystrix

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

以下示例显示了具有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

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

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

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

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

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

13.3健康指标

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

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

13.4 Hystrix Metrics流

要启用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>

14.断路器:Hystrix仪表板

Hystrix的主要好处之一是它能收集每个HystrixCommand的度量指标。Hystrix仪表板以高效的方式显示每个断路器的运行状况。

图14.1。Hystrix仪表板

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
大学生参加学科竞赛有着诸多好处,不仅有助于个人综合素质的提升,还能为未来职业发展奠定良好基础。以下是一些分析: 首先,学科竞赛是提高专业知识和技能水平的有效途径。通过参与竞赛,学生不仅能够深入学习相关专业知识,还能够接触到最新的科研成果和技术发展趋势。这有助于拓展学生的学科视野,使其对专业领域有更深刻的理解。在竞赛过程中,学生通常需要解决实际问题,这锻炼了他们独立思考和解决问题的能力。 其次,学科竞赛培养了学生的团队合作精神。许多竞赛项目需要团队协作来完成,这促使学生学会有效地与他人合作、协调分工。在团队合作中,学生们能够学到如何有效沟通、共同制定目标和分工合作,这对于日后进入职场具有重要意义。 此外,学科竞赛是提高学生综合能力的一种途径。竞赛项目通常会涉及到理论知识、实际操作和创新思维等多个方面,要求参赛者具备全面的素质。在竞赛过程中,学生不仅需要展现自己的专业知识,还需要具备创新意识和解决问题的能力。这种全面的综合能力培养对于未来从事各类职业都具有积极作用。 此外,学科竞赛可以为学生提供展示自我、树立信心的机会。通过比赛的舞台,学生有机会展现自己在专业领域的优势,得到他人的认可和赞誉。这对于培养学生的自信心和自我价值感非常重要,有助于他们更加积极主动地投入学习和未来的职业生涯。 最后,学科竞赛对于个人职业发展具有积极的助推作用。在竞赛中脱颖而出的学生通常能够引起企业、研究机构等用人单位的关注。获得竞赛奖项不仅可以作为个人履历的亮点,还可以为进入理想的工作岗位提供有力的支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值