SpringCloud Hystrix

作者: BzCoder | 来源:发表于2018-09-16 11:54 被阅读7次

    1.简介

    所谓的熔断机制和日常生活中见到电路保险丝是非常相似的,当出现了问题之后,保险丝会自动烧断,以保护我们的电器, 那么如果换到了程序之中呢?当现在服务的提供方出现了问题之后整个的程序将出现错误的信息显示,而这个时候如果不想出现这样的错误信息,而希望替换为一个错误时的内容。
    本文只做简单的介绍,之前在看简书的时候也看到了一篇写的非常详细的文章,有兴趣的话大家可以看看。

    《服务容错保护-Spring Cloud Hystrix》

    2.配置

    Maven

    引入spring-cloud-starter-netflix-hystrix

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

    开启Hystrix

    添加@EnableCircuitBreaker注解来开启Hystrix,当然你可以直接添加@SpringCloudApplication注解,@SpringCloudApplication包含@SpringBootApplication@EnableDiscoveryClient@EnableCircuitBreaker

    @SpringCloudApplication
    public class OrderApplication {
        public static void main(String[] args) {
            SpringApplication.run(OrderApplication.class, args);
        }
    }
    

    对方法添加Hystrix

    @DefaultProperties(defaultFallback = "defaultFallback"):设定默认降级方法
    @HystrixCommand(fallbackMethod = "fallback"):设定某个方法的降级方法
    其中注解中的@HystrixProperty中的参数可以在HystrixCommandProperties类中去查找,关于其属性的含义可以参考官方文档
    在下面示例代码中我们配合了远程调用,实际上一切符合熔断条件的情境我们都可以使用Hystrix。

    @DefaultProperties(defaultFallback = "defaultFallback")
    @RestController
    public class HystrixController {
        @GetMapping("/getProductInfoList")
        @HystrixCommand(fallbackMethod = "fallback",commandProperties =
                {
                        @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds",value = "3000")
                })
        public String getProductInfoList()
        {
            RestTemplate restTemplate = new RestTemplate();
            return restTemplate.postForObject("http://127.0.0.1:8003/product/listForOrder",
                    Arrays.asList("123") ,
                    String.class);
        }
    
        private String fallback()
        {
            return "太拥挤了,请稍后再试";
        }
    
        private String defaultFallback()
        {
            return "默认太拥挤了,请稍后再试";
        }
    }
    

    这样就可以使用Hytrix为我们带来熔断功能了。

    3.在Feign中使用Hytrix

    Maven

    由于在Feign包中已经包含了Hystrix,所以我们不用重新引用Hystrix。

    配置文件

    开启Hystrix功能,此处注意是enabled!

    feign:
     hystrix:
      enabled: true
    

    配置Hystrix参数

    hystrix:
      command:
          default:
            execution:
              isolation:
                thread:
                  timeoutInMilliseconds: 10000
    

    代码配置

    在FeignClient类的注解上添加fallback并指定所需要降级的类,这个类实现FeignClient的接口即可。在以Jar的方式引用FeignClient的时候需要在配置类上添加@ComponentScan来扫描

    /**
     * @author BaoZhou
     * @date 2018/8/29
     */
    @FeignClient(name = "PRODUCT",fallback = ProductClient.ProductClientFallback.class)
    public interface ProductClient {
    
        /**
         * 获取指定ID对应的商品
         * @param productIdList
         * @return
         */
        @PostMapping("/product/listForOrder")
        List<ProductInfoOutput> listForOrder(@RequestBody List<String> productIdList);
    
    
        /**
         * 减库存
         * @param decreaseStockInputs
         */
        @PostMapping("/product/decreaseStock")
        void decreaseStock(@RequestBody List<DecreaseStockInput> decreaseStockInputs);
    
        static class ProductClientFallback implements ProductClient{
    
            @Override
            public List<ProductInfoOutput> listForOrder(List<String> productIdList) {
                return null;
            }
    
            @Override
            public void decreaseStock(List<DecreaseStockInput> decreaseStockInputs) {
    
            }
        }
    }
    

    至此我们就配置完毕了。

    4.Hystrix DashBoard

    Hystrix DashBoard是一款监控Hystrix 情况的组件

    Maven

    引入spring-cloud-starter-hystrix-dashboard

      <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
                <version>1.4.4.RELEASE</version>
            </dependency>
    

    开启Hystrix DashBoard

    添加@EnableHystrixDashboard注解

    @ComponentScan(basePackages = {"com.bzcoder.product.client"})
    @ComponentScan(basePackages={"com.bzcoder.order.controller"})
    @EnableFeignClients(basePackages =  {"com.bzcoder.product.client"})
    @SpringCloudApplication
    @EnableHystrixDashboard
    @EnableSwagger2
    public class OrderApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(OrderApplication.class, args);
        }
    }
    

    访问Hystrix DashBoard

    访问服务地址+hystrix即可访问,例如:http://localhost:8002/hystrix,按照首页的要求填写参数,即可进入监控界面

    Hystrix DashBoard

    这个页面能够可视化的查看熔断状态,请求状态。


    Hystrix DashBoard详情页面

    那么有关于SpringCloud Hystrix的简单介绍就到这里了。

    相关文章

      网友评论

        本文标题:SpringCloud Hystrix

        本文链接:https://www.haomeiwen.com/subject/xwkpgftx.html