zoukankan      html  css  js  c++  java
  • 七、Spring Cloud 之旅 -- Hystrix 微服务保护和容错机制

    在分布式环境中,总会有些节点或者依赖的服务时效(宕机,网络延迟等), Hystrix的出现就是来很好的处理这种可怕问题的,它里面增加了很多容错机制,比如修改请求的线程池大小、信号量等来帮助我们控制分布式系统间组件的交互。Spring Cloud将Hystrix整合到Netflix项目中,Hystrix通过隔离服务间的访问点、停止他们之间的级联故障、提供可回退操作来实现容错。

     

    好了,概念啰嗦完了,现在你知道Hystrix大概是一个什么东东了,现在我们来玩玩代码。

    本节演示的项目结构依旧是老三样,需要源码的童鞋请前往本人github下载:

    https://github.com/aharddreamer/chendong/tree/master/springcloud/hystrix-CSDN/

    项目结构:

    eureka-server: 集群服务器

    first-service-provider: 微服务提供者

    first-service-invoker: 微服务调用者

    只要这三样,我们几乎可以玩转整个Spring Cloud。

    实现方式:

    (不得不说Spring Cloud项目真是方便,集成一个组件就只需要三步: 加依赖,加配置,稍加代码或注解)

    我们先在first-service-invoker的POM里面加入Hystrix的依赖:

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

     

    然后在启动类加入注解@EnableCircuitBreaker启用断路器

    我在这里面还配置了一个restTemplate, 方便调用其他微服务。

    新建一个HelloService,在里面定义一个简单的Command。

    这个Command要做的事情很简单,就是当getMessage方法出错时,会执行getMessageFallback方法返回一个默认返回值。

    新建一个测试接口,跑跑看。

    当然在first-service-provider里面要定义一个message接口供Invoker模块调用:

     

    好了,分别启动eureka-server, first-service-provider, first-service-invoker,然后访问http://localhost:9000/test 试试 (service provider的端口是8080, service invoker的端口是9000)。

     

    试着停掉first-service-provider微服务,然后再访问试试:

    变成了default message

     

    除了上述配置外,你还可以给HystrixCommand加入很多其他配置,都可以在命令注解里完成:

    @HystrixCommand(fallbackMethod = "getMessageFallback", groupKey = "MyGroup",

                commandKey = "MyCommandKey", threadPoolKey = "MyCommandPool",

                commandProperties = {

                @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "1000")},

                threadPoolProperties = {

                @HystrixProperty(name = "coreSize", value = "1")}

    )

     

    当然,也可以在类上面加@DefaultProperties(groupKey=”xxx”)来使用默认配置:

     

    我们也可以使用缓存注解,这样就不用每次都去call 其他微服务了。

    使用缓存注解要先加一个过滤器,在过滤器里面配置下Hystrix的context

    加个注解@CacheResult

     

     

     

  • 相关阅读:
    Orchard part8
    最有效地优化 Microsoft SQL Server 的性能
    MSSQL优化之索引优化
    Orchard使用中的坎坎坷坷
    GridView----CustomRowCellEdit 使用注意事项
    VS 编辑并继续(转载)
    Visual Studio 2010(.NET 4.0)中使用SQLite.NET
    .net环境下ckeditor与ckfinder中文文件链接乱码的问题
    jQuery常用方法集锦
    checkbox、select、radio的设置与获取
  • 原文地址:https://www.cnblogs.com/cnsec/p/13407175.html
Copyright © 2011-2022 走看看