微服务_Hystrix

news2024/9/27 17:30:35
在每个服务中引用该组件,监控当前组件。可被GateWay、Fegin集成。

简介

作用:防止服务雪崩
Hystrix是一个由Netflix开源的容错框架,它主要用于分布式系统中的服务间通信。Hystrix通过在调用服务的过程中添加各种容错机制,来保护系统免受服务故障或网络中断的影响,从而提高了系统的可靠性和弹性。Hystrix提供了许多功能,例如超时控制、断路器、线程池隔离、请求缓存等等,它可以快速、可靠地为您的应用程序提供容错保护。

熔断器的原理很简单,如同电力过载保护器。它可以实现快速失败,如果它在一段时间内侦测到许多类似的错误,会强迫其以后的多个调用快速失败,不再访问远程服务器,从而防止应用程序不断地尝试执行可能会失败的操作,使得应用程序继续执行而不用等待修正错误,或者浪费 CPU
时间去等到长时间的超时产生。熔断器也可以使应用程序能够诊断错误是否已经修正,如果已经修正,应用程序会再次尝试调用操作。

服务熔断

当满足一定的阈值的时候(默认10s内超过20个请求失败)

当失败率达到一定的时候(默认10s内50%的请求失败)

断路器将会开启

开启时,所有请求都不会进行转发

一段时间后(默认是5s),这个时候断路器是半开状态会让其中一个请求进行转发,如果成功,断路器关闭,若失败,重复4和5

快速上手

引入依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>

在入口类添加注解

@EnableCircuitBreaker

服务端熔断

设置熔断后的快速反应(备用处理)

@GetMapping("demo")
@HystrixCommand(fallbackMethod = "demoFallback")	//指定快速处理方案的方法名
public String demo(String id){
    if(){
        throw new RuntimeException("出错!")}
}

public String demoFallback(String id){
    
}

默认的处理

为每个方法都自定义处理方式,代码工作有些繁重,可以指定一个通用的默认的处理方法

@HystrixCommand(defaultFallback = "默认的处理")

默认的处理方法返回值为String,没有形参,因为要可以为不同的方法提供处理

自定义的处理方法形参和返回值要和对应的方法对应

注:用hystrix做服务端熔断,只有服务可用才能正常返回fallback处理,因为fallback处理也是该服务的一部分

消费端熔断

由Feign处理,假如整个服务断了,fallback都用不了,由Feign返回

熔断器触发机制

请添加图片描述

  • 怎么记录?失败的请求怎么办

OpenFeign整合

  • openfeign和gateway重复了吧,
  • 阿我明白了,,,openfegin是项目内部调用,这部分本来就不走网关,,而另外那些要访问网关的(比如前端?)他们需要在网关进行处理才行

openfeign底层默认集成hystrix

开启openFeign对hystrix支持

feign.hystrix.enabled=true

在feign的client接口上

@FeignClient(value = "服务id",fallback=实现类.class)

然后编写bean实现该client接口,重写对应方法,加上组件注解

用工厂模式

以若依项目为例

@FeignClient(value = ServiceNameConstants.SYSTEM_SERVICE, fallbackFactory = RemoteUserFallbackFactory.class)

编写工厂类,实现FallbackFactory<T>接口,重写create方法,返回一个内部类对象(毕竟工厂类要返回实体对象,但原client是个接口)

@Component
public class RemoteUserFallbackFactory implements FallbackFactory<RemoteUserService>
{
    private static final Logger log = LoggerFactory.getLogger(RemoteUserFallbackFactory.class);

    @Override
    public RemoteUserService create(Throwable throwable)
    {
        log.error("用户服务调用失败:{}", throwable.getMessage());
        return new RemoteUserService()
        {
            @Override
            public R<LoginUser> getUserInfo(String username, String source)
            {
                return R.fail("获取用户失败:" + throwable.getMessage());
            }

            @Override
            public R<Boolean> registerUserInfo(SysUser sysUser, String source)
            {
                return R.fail("注册用户失败:" + throwable.getMessage());
            }
        };
    }

整合GateWay过滤器

spring:
  cloud:
    gateway:
      routes:
        # 系统模块
        - id: ruoyi-system
          uri: lb://ruoyi-system
          predicates:
            - Path=/system/**
          filters:
            - StripPrefix=1
            # 降级配置
            - name: Hystrix
              args:
                name: default
                # 降级接口的地址
                fallbackUri: 'forward:/fallback'

上面配置包含了一个Hystrix过滤器,该过滤器会应用Hystrix熔断与降级,会将请求包装成名为fallback的路由指令RouteHystrixCommandRouteHystrixCommand继承于HystrixObservableCommand,其内包含了Hystrix的断路、资源隔离、降级等诸多断路器核心功能,当网关转发的请求出现问题时,网关能对其进行快速失败,执行特定的失败逻辑,保护网关安全。

配置中有一个可选参数fallbackUri,当前只支持forward模式的URI。如果服务被降级,请求会被转发到该URI对应的控制器。控制器可以是自定义的fallback接口;也可以使自定义的Handler,需要实现接口org.springframework.web.reactive.function.server.HandlerFunction<T extends ServerResponse>

Hystrix Dashborad 图形化监控

显示状态信息。不是很重要,不推荐

是不是有统一的微服务监控能取代?

引入dashborad依赖, 默认@EnableDiscoveryClient开启
erver.HandlerFunction`。

Hystrix Dashborad 图形化监控

显示状态信息。不是很重要,不推荐

引入dashborad依赖, 默认@EnableDiscoveryClient开启

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/637442.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

hbuilderX uni-app 自定义快捷键无效、无法生效解决方法(附:好用的常用的快捷键自定义代码片段)

在最后加上 ,"override": true 才能让原有默认的快捷键被覆盖 好用的常用的快捷键自定义代码片段 [//打开快捷键设置{"key": "altshiftk","command": "workbench.action.openGlobalKeybindings","override": tr…

信息专业求职个人简历最新版

信息专业求职个人简历最新版1 个人信息 _ 性 别&#xff1a; 男 婚姻状况&#xff1a; 已婚 民 族&#xff1a; 汉族 户 籍&#xff1a; 江苏-宜兴 年 龄&#xff1a; 34 现所在地&#xff1a; 江苏-宜兴 身 高&#xff1a; 175cm 希望地区&#xff1a; 江苏-常州、 江苏-…

微软发布自己的 Linux 发行版:Azure Linux

导读在内部使用两年并自 2022 年 10 月起以公共预览版运行后&#xff0c;微软终于在日前正式公开发布了其 Azure Linux 的发行版。 在内部使用两年并自 2022 年 10 月起以公共预览版运行后&#xff0c;微软终于在日前正式公开发布了其 Azure Linux 的发行版。 微软 Azure Lin…

二叉树的层序遍历以及队列的实现

思维导图&#xff1a; 一&#xff0c;什么是层序遍历 层序遍历&#xff0c;顾名思义就是一层一层的遍历。比如我的这棵二叉树&#xff1a; 如果使用层序遍历的话它的结果就会是这样的&#xff1a; 1->5->9->7->10->13->8,这就是一层一层的遍历&#xff0c;一…

SciencePub学术 | 计算机类重点SCIEI征稿中

SciencePub学术 刊源推荐: 计算机类重点SCI&EI征稿中&#xff01;影响因子高&#xff0c;对国人非常友好。信息如下&#xff0c;录满为止&#xff1a; 一、期刊概况&#xff1a; 计算机类重点SCI&EI &#x1f4cc;【期刊简介】IF&#xff1a;7.5-8.0&#xff0c;JCR…

IDEA 关闭 SonarLint 自动扫描

进入Settings → 搜索 SonarLint → 将Automatically trigger analysis取消勾选 即可。

Unity入门2——Unity工作原理

一、工具栏 文件操作&#xff1a;新建工程&#xff0c;新建场景&#xff0c;工程打包等等 编辑操作&#xff1a;对象编辑操作相关&#xff0c;工程设置&#xff0c;引擎设置相关 资源操作&#xff1a;基本等同于 Project 窗口中右键相关功能 对象操作&#xff1a;基本等同于 Hi…

151-B-DC24V、252-B-AC220V气压控制方向阀

151-B-DC24V、252-B-AC220V、332-B-DC24V、453-B-AC220V、232-B-AC110V、351-B-DC24V、431-B-DC12V、253-B-DC24V气动电磁阀体积小,流量大,外形美观,性能可靠.使用寿命长.适用于机电一体化领域.有多重规格和产品颜色可选择&#xff0c;规格G1/8、G1/4、G3/8、G1/2、电控方式&am…

干洗店洗护软件,洗鞋店软件,洗鞋店小程序,

干洗店洗护软件&#xff0c;洗鞋店软件&#xff0c;洗鞋店小程序&#xff0c;水洗标打印标签打印&#xff0c;上门取送&#xff0c;拍照上传&#xff0c;多门店多网点&#xff0c;用户端&#xff0c;骑手端&#xff0c;门店端&#xff0c;网点端。具有以下非常强大的功能和优势…

亚马逊美国站 儿童珠宝首饰CPC认证 ASTM F2923标准CPSIA检测报告

为什么越来越多人爱送珠宝给宝宝? 1、有人说每个小孩子都是来自神的恩典&#xff0c;他们就像父母最珍贵的珠宝值得用一生的时间去呵护与珍藏。 2、西班牙人认为&#xff0c;儿童珠宝作为他们的第一份礼物&#xff0c;会庇佑孩子们未来过上非常幸福&#xff0c;繁荣而成功的…

算法模板(5):数学(4):其他数学

线性代数 高斯消元 ( O ( n 3 ) ) (O(n^3)) (O(n3)) 883. 高斯消元解线性方程组 步骤&#xff1a;枚举每一列&#xff1a;找到绝对值最大的一行&#xff0c;将改行换到最上面&#xff0c;将该行第一个数变成1&#xff0c;将下面所有行的第c列变成0. #include<cstdio>…

年薪80万程序员被鄙视,不如二本教书老师…

“程序员好还是老师好&#xff1f;” 这个问题一直困扰着许多网友&#xff0c;毕竟这两个工作都是让人羡慕的。 程序员普遍收入高&#xff0c;有挑战性&#xff1b;老师是个铁饭碗&#xff0c;休假日多&#xff0c;还有退休金。 也有程序员曾经发帖&#xff0c;表示自己现在…

Go-fastdfs 任意文件上传(CVE-2023-1800)

ZoomEye搜索"go-fastdfs" sjqzhang go-fastdfs 是一个开源分布式文件系统&#xff0c;专为存储和共享大文件而设计。 它是用 Go 编写的&#xff0c;由开发者 sjqzhang 在 GitHub 上维护。 在 sjqzhang go-fastdfs 1.4.3 之前发现了一个被归类为严重的漏洞。 受此问题…

保姆级攻略!Elsevier期刊投稿教程,手把手操作建议收藏!

目前所投的期刊绝大多数为Elsevier旗下的期刊&#xff0c;如Acta、JAC、MSEA、JMST等&#xff0c;以JAC为例。以下分享逐步投稿操作流程&#xff1a;&#xff08;以一本Elsevier旗下期刊为例&#xff09; 0. 进入期刊投稿主页&#xff0c;一般打开期刊主页&#xff0c;点击【S…

Python+ffmpeg实现视频录制功能

UI自动化通常是在无人值守特别是非工作时间执行&#xff0c;但是因为网络、产品性能、产品不稳定&#xff08;偶现缺陷&#xff09;等问题导致UI自动化失败&#xff0c;第二天分析失败原因时有的失败情况从报告中并不能分析出失败的具体原因&#xff08;即使有截图&#xff09;…

图书推荐|大数据从业人人必备的Excel大数据处理分析

《Excel大数据处理&分析》为活页式新形态教材&#xff0c;介绍了Excel 2016的数据表基本操作、数据输入、数据获取、数据排序、数据筛选、分类汇总、公式与函数、日期和时间函数、数学和统计函数、查找和引用函数、数据透视表、图表的可视化分析、宏和VBA、数据分析工具的应…

导轨安装DIN11 IPO EM系列模拟信号隔离放大器转换器4-20mA/0-10V/0-75mV/0-100mV/0-±10V

概述&#xff1a; 导轨安装DIN11 IPO EM系列模拟信号隔离放大器是一种将输入信号隔离放大、转换成按比例输出的直流信号混合集成电路。产品广泛应用在电力、远程监控、仪器仪表、医疗设备、工业自控等需要电量隔离测控的行业。该模块内部嵌入了一个高效微功率的电源&#xff0…

NLP学习笔记八-RNN文本自动生成

NLP学习笔记八-RNN文本自动生成 RNN文本自动生成的原理&#xff1a; 结合下面一张图&#xff0c;我们讲一下RNN文本自动生成的原理&#xff0c;RNN文本自动生成其实从一种简单意义上来说&#xff0c;就是做的分类任务&#xff0c;为什么这门说呢&#xff1f; 如下图&#xff0…

大麦一键生成订单截图 大麦生成抢票成功截图

一键生成购票链接 一键生成订单截图 下载源码程序&#xff1a;https://pan.baidu.com/s/16lN3gvRIZm7pqhvVMYYecQ?pwd6zw3

DVWA-9.Weak Session IDs

大约 了解会话 ID 通常是在登录后以特定用户身份访问站点所需的唯一内容&#xff0c;如果能够计算或轻松猜测该会话 ID&#xff0c;则攻击者将有一种简单的方法来访问用户帐户&#xff0c;而无需暴力破解密码或查找其他漏洞&#xff0c;例如跨站点脚本。 目的 该模块使用四种…