SpringCloud微服务熔断器Hystrix使用详解

作者:_时光煮雨 时间:2023-07-06 22:57:46 

什么是Hystrix

在日常生活用电中,如果我们的电路中正确地安置了保险丝,那么在电压异常升高时,保险丝就会熔断以便切断电流,从而起到保护电路安全运行的作用。

在货船中,为了防止漏水和火灾的扩散,一般会将货仓进行分割,避免了一个货仓出事导致整艘船沉没的悲剧,这就是舱壁保护机制。

Hystrix提供的熔断器也类似,在调用某个服务提供者时,当一定时间内请求总数超过配置的阈值,且窗口期内错误率过高,那Hystrix就会对调用请求熔断,后续的请求直接短路,进入降级逻辑,并执行本地的降级策略。

SpringCloud微服务熔断器Hystrix使用详解

同时Hystrix也将系统中的服务提供者隔离起来,一个服务提供者延迟过高或者失败,并不会导致整个系统的失败,同时也能够控制调用这些服务的并发度。

总之,Hystrix 能使你的系统在出现依赖服务失效的时候,通过隔离系统所依赖的服务,防止服务级联失败,同时提供失败回退机制,更优雅地应对失效,并使你的系统能更快地从异常中恢复。

Hystrix实战

接着我们上篇文章中的dms服务,进行如下修改:

Feign 本身就支持Hystrix,不需要额外引入依赖。

1、首先修改调用方app服务的配置文件application.xml,开启hystrix

feign:
 hystrix:
  enabled: true

2、增加服务熔断处理类,实现DmsApi接口

@Component
public class DmsHystrixImpl implements DmsApi {
   @Override
   public String findNameByCode(String code) {
       return "服务器故障";
   }
}

3、修改接口类注解,增加熔断处理类:fallback = DmsHystrixImpl.class;

(Spring Cloud Feign HTTP请求异常Fallback容错机制,它是基于Hystrix实现的,所以要通过配置参数feign.hystrix.enabled=true开启该功能)

@FeignClient(value = "dms",fallback = DmsHystrixImpl.class)
public interface DmsApi {
   @RequestMapping(value="/dict/[code]", method = RequestMethod.GET)
   public String findNameByCode(@PathVariable("code") String code);
}

4、增加异常代码,以便验证

@RestController
public class DmsController implements DmsApi {
   @Override
   public String findNameByCode(String code) {
       Integer.parseInt("a");
       switch (code){
           case "0" :
               return "男";
           case "1" :
               return "女";
           default:
               return "未知";
       }
   }
}

5、启动项目,进行验证,返回正确结果。

SpringCloud微服务熔断器Hystrix使用详解

来源:https://coder965.blog.csdn.net/article/details/125492717

标签:SpringCloud,微服务,熔断器,Hystrix
0
投稿

猜你喜欢

  • Spring集成MyBatis 及Aop分页的实现代码

    2022-01-06 14:30:47
  • 详解直接插入排序算法与相关的Java版代码实现

    2022-06-13 09:06:38
  • Android使用lottie加载json动画的示例代码

    2021-06-20 00:47:01
  • java读取ftp中TXT文件的案例

    2022-07-07 20:10:11
  • 归并排序的原理及java代码实现

    2021-11-18 13:51:10
  • redisson特性及优雅实现示例

    2022-02-13 19:51:25
  • Android自定义View之绘制圆形头像功能

    2022-09-27 19:24:29
  • Android SurfaceView画板操作

    2022-07-10 15:12:23
  • Android三种菜单实例分析

    2023-09-09 05:17:20
  • 使用Android Studio检测内存泄露(LeakCanary)

    2022-08-31 11:08:12
  • Java Springboot的目的你知道吗

    2022-12-20 14:16:24
  • C# memcached缓存使用实例代码

    2022-01-15 02:17:11
  • Java中instanceof关键字实例讲解

    2023-08-04 07:48:31
  • Android Studio 全屏沉浸式透明状态栏效果的实现

    2021-07-16 06:42:41
  • Java语言实现简单FTP软件 FTP协议分析(1)

    2023-11-10 17:57:21
  • JAVA算法起步之插入排序实例

    2021-05-30 15:52:30
  • Mybatis plus多租户方案的实战踩坑记录

    2023-08-01 05:19:09
  • SpringBoot启动自动终止也不报错的原因及解决

    2023-01-16 02:15:40
  • 使用Android造了个滚轮控件轮子示例

    2023-04-29 07:09:17
  • 浅谈C# 抽象类与开闭原则

    2023-11-07 11:00:08
  • asp之家 软件编程 m.aspxhome.com