zoukankan      html  css  js  c++  java
  • Spring Cloud 微服务四:熔断器Spring cloud hystrix

    前言:在微服务架构中,一般都是进程间通信,有可能调用链都比较长,当有底层某服务出现问题时,比如宕机,会导致调用方的服务失败,这样就会发生一连串的反映,造成系统资源被阻塞,最终可能造成雪崩。在spring cloud家族中,hystrix就是用来处理这个问题的,本章将重点介绍该组件。前情回顾请参考:

    Spring Cloud 微服务一:Consul注册中心

    Spring Cloud 微服务二:API网关spring cloud zuul

    Spring Cloud 微服务三: API网关Spring cloud gateway

    • hystrix概览
    • Spring Cloud Hystrix 实现了断路器、线路隔离等一系列服务保护功能。它也是基于 Netflix 的开源框架 Hystrix 实现的,该框架的目标在于通过控制那些访问远程系统、服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。Hystrix 具备服务降级、服务熔断、线程和信号隔离、请求缓存、请求合并以及服务监控等强大功能
    • hytrix集成和配置
      • 准备工作,为了使用feign以及hystrix需要对之前的代码做少许调整,否则可能会出现无法负载的问题。
          首先是user-api,需要把pom中的依赖全部删除,保持api的简洁性;另外删除UserService接口中的所有注解,后面会把注解放到实现类中,这样也保持了接口的整洁性。
      public interface UserService {
      
          List<User> getAllUsers();
      }

              然后是user-service,将注解放到实现类中

      @RestController
      public class UserServiceImpl implements UserService {
      
          @GetMapping("/all")
          @Override
          public List<User> getAllUsers() {
              List<User> userList = new ArrayList<User>();
      
              // should call DAO methods
              userList.add(new User(1,"Dalston"));
              userList.add(new User(2,"Edgware"));
              userList.add(new User(3, "Finchley"));
      
              return userList;
          }
      }

               最后,user-consumer做相应的修改,修改UserServiceClient接口,去掉对UserService的继承,这也是spring官方提倡的做法,同时在@FeignClient注解中添加fallback类,该类用于服务出故障时调用的本地方法

      @FeignClient(name = "user-service", fallback = UserServiceClientFallback.class)
      public interface UserServiceClient {
          @GetMapping("/all")
          List<User> getAllUsers();
      }

             添加UserServiceClientFallback类,实现具体方法

      @Component
      public class UserServiceClientFallback implements UserServiceClient {
          @Override
          public List<User> getAllUsers() {
              System.out.println("Fallback service");
              List<User> errorList = new ArrayList<>();
              errorList.add(new User(2001,"get fallback"));
              return errorList;
          }
      }

          这样,对于原有服务的修改就完成了

      • 启动熔断,在user-consumer的启动类中添加@EnableCircuitBreaker注解,用于启用hystrix
        @EnableCircuitBreaker
        @SpringBootApplication
        @EnableFeignClients({"com.boe.micro.service"})
        public class UserConsumerApplication {
            public static void main(String[] args) {
                SpringApplication.run(UserConsumerApplication.class, args);
            }
        }
      • 调整配置文件,启用hystrix,配置文件中追加如下配置 
        feign:
          hystrix:
            enabled: true
      • 测试,启动user-consumer,user-service,访问http://localhost:10080/users,会返回正常结果,停掉user-service,再访问该地址,会调用UserServiceClientFallback中的方法
  • 相关阅读:
    在HTML5中,用getCurrentPosition()获取用户的当前位置
    邮件设置 ssl://smtp.exmail.qq.com:465 can not connect to the SMTP server
    IIS绑定中文域名
    destoon 会员状态栏不显示
    汉诺塔的移动--python递归实现
    微星 msi B450迫击炮+2600X+RX588 3A平台装机
    正则表达式-1
    接口--php对接农行网上支付平台-b2b
    python----字符串操作函数
    php面试题--1
  • 原文地址:https://www.cnblogs.com/csts/p/10284148.html
Copyright © 2011-2022 走看看