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: "服务调用失败"
    }
    

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

  • 相关阅读:
    WPF DelegateCommand 出现Specified cast is not valid
    WPF DelegateCommand 出现Specified cast is not valid
    WPF DelegateCommand 出现Specified cast is not valid
    win10 sdk 是否向下兼容
    win10 sdk 是否向下兼容
    win10 sdk 是否向下兼容
    PHP extract() 函数
    PHP end() 函数
    PHP each() 函数
    PHP current() 函数
  • 原文地址:https://www.cnblogs.com/markLogZhu/p/12970370.html
Copyright © 2011-2022 走看看