微服务实战|熔断器hystrix初体验(代码片段)

_时光煮雨 _时光煮雨     2022-10-21     331

关键词:

什么是Hystrix

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

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

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

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

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

Hystrix实战

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

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

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

feign:
 hystrix:
  enabled: true

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

/**
 * @Author:公众号:程序员965
 * @create 2022-06-26
 **/
@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开启该功能)

/**
 * @Author:公众号:程序员965
 * @create 2022-06-20
 **/
@FeignClient(value = "dms",fallback = DmsHystrixImpl.class)
public interface DmsApi 
    @RequestMapping(value="/dict/code", method = RequestMethod.GET)
    public String findNameByCode(@PathVariable("code") String code);

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

/**
 * @Author:公众号:程序员965
 * @create 2022-06-20
 **/
@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、启动项目,进行验证,返回正确结果。

总结

在微服务架构中,通常会有多个服务间相互调用,基础服务的故障可能会导致级联故障,进而造成整个系统不可用的情况,这种现象被称为服务雪崩效应。服务雪崩效应是一种因“服务提供者”的不可用导致“服务消费者”的不可用,并将不可用逐渐放大的过程。

如:A作为服务提供者,B为A的服务消费者,C和D是B的服务消费者。A不可用引起了B的不可用,并将不可用像滚雪球一样放大到C和D时,雪崩效应就形成了。为了避免雪崩效应的形成,就需要使用Hystrix。

高性能云服务器 精品线路独享带宽,毫秒延迟,年中盛惠 1 折起

springcloudalibaba微服务实战一-基础环境准备(代码片段)

...在这么火,我一直想写个基于SpringcloudAlibaba一步一步构建微服务架构的系列博客,终于下定决心从今天开始本系列文章的第一篇-基础环境准备。该系列文章内容主要基于三个微服务:用户服务AccountService,订单服务OrderService,产... 查看详情

springboot与kubernetes云原生微服务实战(代码片段)

视频地址 --JK时间https://www.bilibili.com/video/BV1gf4y1s769/?p=5git 代码地址https://github.com/spring2go/staffjoyP01课程介绍-----------------03:35P02背景说明----------------09:11P03课程目标和主要内容----------------10:16P0 查看详情

微服务实战|集中配置中心config对称加密实战(代码片段)

前言上一篇:微服务实战|集中配置组件Config规避敏感信息泄露上一篇文章中,我们介绍了使用集中配置中心组件Config实现了敏感信息的集中管理。但是,在配置文件中,配置信息依然使用的是明文,今天我们... 查看详情

10.go语言高并发与微服务实战---微服务的容错处理与负载均衡

第10章微服务的容错处理与负载均衡10.1服务熔断 10.1.1分布式系统中的服务雪崩 10.1.2服务熔断保障系统可用性 10.1.3断路器10.2负载均衡 1.负载均衡类型 2.负载均衡算法      查看详情

微服务实战:选择微服务部署策略

 微服务实战(一):微服务架构的优势与不足微服务实战(二):使用APIGateway微服务实战(三):深入微服务架构的进程间通信微服务实战(四):服务发现的可行方案以及实践案例微服务实践(五):微服务的事件驱动... 查看详情

chrisrichardson微服务实战系列

微服务实战(一):微服务架构的优势与不足微服务实战(二):使用APIGateway微服务实战(三):深入微服务架构的进程间通信微服务实战(四):服务发现的可行方案以及实践案例微服务实践(五):微服务的事件驱动数据... 查看详情

精通系列)创建springboot项目+基于ssm多模块项目案例+微服务实战(代码片段)

Gradle文章目录Java之Gradle【IDEA版】入门到精通(上)(一篇文章精通系列)【安装+基本使用+项目创建+项目部署+文件操作+依赖管理+插件使用】Java之Gradle【IDEA版】入门到精通(下)(... 查看详情

精通系列)创建springboot项目+基于ssm多模块项目案例+微服务实战(代码片段)

Gradle文章目录Java之Gradle【IDEA版】入门到精通(上)(一篇文章精通系列)【安装+基本使用+项目创建+项目部署+文件操作+依赖管理+插件使用】Java之Gradle【IDEA版】入门到精通(下)(... 查看详情

精通系列)创建springboot项目+基于ssm多模块项目案例+微服务实战(代码片段)

Gradle文章目录Java之Gradle【IDEA版】入门到精通(上)(一篇文章精通系列)【安装+基本使用+项目创建+项目部署+文件操作+依赖管理+插件使用】Java之Gradle【IDEA版】入门到精通(下)(... 查看详情

使用dapr和.net6.0进行微服务实战:dapr简介(代码片段)

...石,让我们一起精进。本文是《使用Dapr和.NET6.0进行微服务实战》的第2篇Dapr简介部分,大致包括:了解Dapr,探索Dapr核心组件,设置Dapr环境,构 查看详情

.net微服务实战之可观测性(代码片段)

前言很多次去面试,有经验的面试官都会问一个问题,你是怎么去定位日常遇到的问题?平常跟同行分享自己遇到的问题,事后他会问我,这种看起来毫无头绪的问题,你是怎么去定位解决的?其实我... 查看详情

springcloudalibaba微服务实战三十四-隐私接口禁止外部访问(代码片段)

...SpringCloud体系下如何防止前端请求绕过网关直接到达后端微服务,今天我们要反其道而行之,介绍在SpringCloud体系中如何防止内部隐私接口被网关调用。看到这里可能有的同学会有点晕,怎么还有这种业务场景呢,... 查看详情

springcloudalibaba微服务实战三十五-退出登录注销jwttoken(代码片段)

大家好,我是飘渺。有一个看我SpringCloudalibaba系列文章的粉丝私下问我:如何处理jwt失效的问题?修改密码或退出登录后需要将之前的jwttoken失效掉,不允许使用旧token登录系统。我说:很简单呀,咱们直... 查看详情

3.20go微服务实战(微服务实战)---日志和监控

第20章 日志和监控20.1 日志实践20.2 指标 20.2.1 指标数据类型 20.2.2 命名约定 20.2.3 存储和查询 20.2.4 Grafana20.3 日志记录 20.3.1 具有关联ID的分布式跟踪 20.3.2 ElasticSearch、Logstash和Kibana 20.3.3 Kibana 20.4 异常    查看详情

3.20go微服务实战(微服务实战)---日志和监控

第20章 日志和监控20.1 日志实践20.2 指标 20.2.1 指标数据类型 20.2.2 命名约定 20.2.3 存储和查询 20.2.4 Grafana20.3 日志记录 20.3.1 具有关联ID的分布式跟踪 20.3.2 ElasticSearch、Logstash和Kibana 20.3.3 Kibana 20.4 异常    查看详情

springcloudalibaba微服务实战十四-springcloudgateway集成oauth2.0(代码片段)

导读:上篇文章我们已经抽取出了单独的认证服务,本章主要内容是让SpringCloudGateway集成Oauth2。概念部分在网关集成Oauth2.0后,我们的流程架构如上。主要逻辑如下:1、客户端应用通过api网关请求认证服务器获取a... 查看详情

3.21go微服务实战(微服务实战)---持续交付

第21章 持续交付21.1 持续交付简介 21.1.1 手动部署 21.1.2 持续交付的好处 21.1.3 持续交付面面观 21.1.4 持续交付的过程21.2 容器编排的选项和基础架构21.3 Terraform 21.3.1 提供者 21.3.2 Terraform配置入口点 21.3.3 VPC模块 21.3.... 查看详情

3.21go微服务实战(微服务实战)---持续交付

第21章 持续交付21.1 持续交付简介 21.1.1 手动部署 21.1.2 持续交付的好处 21.1.3 持续交付面面观 21.1.4 持续交付的过程21.2 容器编排的选项和基础架构21.3 Terraform 21.3.1 提供者 21.3.2 Terraform配置入口点 21.3.3 VPC模块 21.3.... 查看详情