zoukankan      html  css  js  c++  java
  • SpringCloud入门之服务熔断

    一、服务熔断介绍

    1.1 服务雪崩

    在微服务架构中,服务与服务之间通过远程调用的方式进行通信,一旦某个被调用的服务发生了故障,依赖其的服务也会发生故障,此时就会发生故障的蔓延,最终导致系统瘫痪,这就是所谓的”雪崩效应”。

    1.2 服务熔断

    熔断机制是应对雪崩效应的一种微服务链路保护机制。当链路的某个微服务不可用或者响应时间太长时,会进行服务的降级,进而熔断该节点微服务的调用,快速返回”错误”的响应信息。当检测到该节点微服务响应正常后,重新恢复调用链路。

    二、Hystrix

    2.1 Hystrix 介绍

    Hystrix 是一个用于分布式系统的延迟和容错的开源库。Hystrix 实现了断路器模式,当某个服务发生故障时,通过断路器的监控,给调用方返回一个错误响应,而不是长时间的等待,这样就不会使得调用方由于长时间得不到响应而占用线程,从而防止故障的蔓延。Hystrix 具备服务降级、服务熔断、线程隔离、请求缓存、请求合并及服务监控等强大功能。

    2.2 Hystrix 使用方法

    通过在方法上使用注解 @HystrixCommand ,常用参数:

    * fallbackMethod:指定服务降级处理方法;
    * ignoreExceptions:忽略某些异常,不发生服务降级;
    * commandKey:命令名称,用于区分不同的命令;
    * groupKey:分组名称,Hystrix会根据不同的分组来统计命令的告警及仪表盘信息;
    * threadPoolKey:线程池名称,用于划分线程池。
    

    二、服务降级实例

    注:本实例在 ribbon-service 项目基础上演示。

    2.1 在 pom 文件中新增 Hystrix 依赖

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

    2.2 开启断路器功能

    RibbonServiceApplication 中添加 @EnableCircuitBreaker 注解启用 Hystrix 断路器功能

    @EnableCircuitBreaker
    @SpringBootApplication
    public class RibbonServiceApplication {
        ......
    }
    

    2.3 新增失败降级回调方法

    @RestController
    public class UserRibbonController {
    
        @Value("${service-url.user-service}")
        private String userServiceUrl;
        private final RestTemplate restTemplate;
    
        public UserRibbonController(RestTemplate restTemplate) {
            this.restTemplate = restTemplate;
        }  
        
        @GetMapping("/get/{username}")
        @HystrixCommand(fallbackMethod = "fallbackMethod")
        public User getUser(@PathVariable String username) {
            return restTemplate.getForObject(userServiceUrl + "/user/{1}", User.class, username);
        }
    
        public User fallbackMethod(@PathVariable String username) {
            return new User("服务调用失败");
        }
    }    
    

    2.4 启动服务

    访问 http://localhost:8210/user/get/marklogzhu,返回如下 JSON 数据:

    {
      username: "marklogzhu"
    }
    

    停止 user-service ,再次访问 http://localhost:8210/user/get/marklogzhu,返回如下 JSON 数据:

    {
    	username: "服务调用失败"
    }
    

    可以发现已经发生了服务降级。

  • 相关阅读:
    后缀数组板子
    上海高校金马五校赛 J
    西安电子科技大学第16届程序设计竞赛网络同步赛 G-小国的复仇
    HDU
    string 与char* char[]之间的转换 .
    (分治思想)(归并排序)C
    如何取出 Map中key和value的值
    C++ STL 中 map 容器的说明和使用技巧 .
    (经典map)A
    Babelfish(6.1.2)(sort结构体排序)(sscanf()基本使用方法)(二分法)
  • 原文地址:https://www.cnblogs.com/markLogZhu/p/12970370.html
Copyright © 2011-2022 走看看