• 猿创征文|Hystrix的概念与简单使用


    前言:
    好久没有用到微服务相关的知识了,最近在项目中又遇到了难题,因此又重新学习了一下,以下是根据所看课程做的笔记🎊
    如果文章有什么需要改进的地方还请大佬多多指教🥂
    小威先感谢大家的支持了😁
    在这里插入图片描述

    🏠个人主页:小威要向诸佬学习呀
    🧑个人简介:大家好,我是小威,一个想要与大家共同进步的男人😉😉
    目前状况🎉:目前大二,在一家满意的公司实习👏👏

    💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,我亲爱的大佬😘

    以下正文开始


    在这里插入图片描述

    Spring Cloud调用接口过程

    Spring Cloud 在接口调用上,大致会经过如下几个组件配合:

    Feign ----->Hystrix —>Ribbon —>Http Client(apache http components 或者 Okhttp) 具体交互流程上,如下所示:

    • 接口化请求调用当调用被@FeignClient注解修饰的接口时,在框架内部,将请求转换成Feign的请求实例feign.Request,交由Feign框架处理。

    • Feign :转化请求Feign是一个http请求调用的轻量级框架,可以以Java接口注解的方式调用Http请求,封装了Http调用流程。

    • Hystrix:熔断处理机制 Feign的调用关系,会被Hystrix代理拦截,对每一个Feign调用请求,Hystrix都会将其包装成HystrixCommand,参与Hystrix的流控和熔断规则。如果请求判断需要熔断,则Hystrix直接熔断,抛出异常或者使用FallbackFactory返回熔断Fallback结果;如果通过,则将调用请求传递给Ribbon组件。

    • Ribbon:服务地址选择 当请求传递到Ribbon之后,Ribbon会根据自身维护的服务列表,根据服务的服务质量,如平均响应时间,Load等,结合特定的规则,从列表中挑选合适的服务实例,选择好机器之后,然后将机器实例的信息请求传递给Http Client客户端,HttpClient客户端来执行真正的Http接口调用;

    • HttpClient :Http客户端,真正执行Http调用根据上层Ribbon传递过来的请求,已经指定了服务地址,则HttpClient开始执行真正的Http请求

    在这里插入图片描述

    Hystrix概念

    Hystrix是由Netflix开源的一个服务隔离组件,通过服务隔离来避免由于依赖延迟、异常,引起资源耗尽导致系统不可用的解决方案。

    Hystrix 是一个供分布式系统使用,提供延迟和容错功能,保证复杂的分布系统在面临不可避免的失败时,仍能有其弹性

    比如系统中有很多服务,当某些服务不稳定的时候,使用这些服务的用户线程将会阻塞,如果没有隔离机制,系统随时就有可能会挂掉,从而带来很大的风险。SpringCloud使用Hystrix组件提供断路器、资源隔离与自我修复功能。

    在这里插入图片描述

    feign结合Hystrix使用

    首先在项目中添加依赖

       <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-netflix-ribbonartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-netflix-hystrixartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-openfeignartifactId>
        dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    在配置文件中添加hystrix配置

    #开启熔断机制
    feign.hystrix.enabled=true
    
    • 1
    • 2

    然后设置hystrix超时时间,默认是1000ms

    hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=6000
    
    • 1

    在包里面创建熔断器的实现类

    @Component
    public class VodFileDegradeFeignClient implements VodClient {
        @Override
        public R removeVideo(String videoId) {
            return R.error().message("time out");
        }
        @Override
        public R removeVideoList(List videoIdList) {
            return R.error().message("time out");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    修改接口中的注解

    @FeignClient(name = "service-vod", fallback = VodFileDegradeFeignClient.class)
    @Component
    public interface VodClient {
        @DeleteMapping(value = "/eduvod/vod/{videoId}")
        public R removeVideo(@PathVariable("videoId") String videoId);
        @DeleteMapping(value = "/eduvod/vod/delete-batch")
        public R removeVideoList(@RequestParam("videoIdList") List videoIdList);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述

    文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起讨论🍻
    再次感谢各位小伙伴儿们的支持🤞

    在这里插入图片描述

  • 相关阅读:
    AIGC生成式人工智能的概念和孵化关键里程碑
    面向对象编程-终结篇 es6新增语法
    【FPGA教程案例45】图像案例5——基于FPGA的图像均值滤波verilog实现,通过MATLAB进行辅助验证
    MTK平台闪光灯相关信息
    树莓派部署.net core控制台程序
    2023 年江西省职业院校技能大赛软件测试(高职组)赛项样题
    主板与品牌电脑启动快捷键
    TI xWR系列毫米波雷达如何使用MATLAB自动连接串口?
    数据删掉了怎么恢复?数据删除后还能恢复吗
    go语言的基本数据类型
  • 原文地址:https://blog.csdn.net/qq_53847859/article/details/126647471