Hystrix工作步骤说明以及服务监控hystrixDashboard

news2024/11/24 17:32:24

目录

一、步骤说明和流程解析

二、服务监控hystrixDashboard


官网:How it Works · Netflix/Hystrix Wiki · GitHub

一、步骤说明和流程解析

 

 

1    创建 HystrixCommand(用在依赖的服务返回单个操作结果的时候) 或 HystrixObserableCommand(用在依赖的服务返回多个操作结果的时候) 对象。
2    命令执行。其中 HystrixComand 实现了下面两种执行方式:

execute():同步执行,从依赖的服务返回一个单一的结果对象, 或是在发生错误的时候抛出异常。queue():异步执行, 直接返回 一个Future对象, 其中包含了服务执行结束时要返回的单一结果对象。

而 HystrixObservableCommand 实现了以下两种执行方式:

observe():返回 Observable 对象,它代表了操作的多个结果,它是一个 Hot Obserable(不论 "事件源" 是否有 "订阅者",都会在创建后对事件进行发布,所以对于 Hot Observable 的每一个 "订阅者" 都有可能是从 "事件源" 的中途开始的,并可能只是看到了整个操作的局部过程)。toObservable(): 同样会返回 Observable 对象,也代表了操作的多个结果,但它返回的是一个Cold Observable(没有 "订阅者" 的时候并不会发布事件,而是进行等待,直到有 "订阅者" 之后才发布事件,所以对于 Cold Observable 的订阅者,它可以保证从一开始看到整个操作的全部过程)。
3    若当前命令的请求缓存功能是被启用的, 并且该命令缓存命中, 那么缓存的结果会立即以 Observable 对象的形式 返回。
4    检查断路器是否为打开状态。如果断路器是打开的,那么Hystrix不会执行命令,而是转接到 fallback 处理逻辑(第 8 步);如果断路器是关闭的,检查是否有可用资源来执行命令(第 5 步)。
5    线程池/请求队列/信号量是否占满。如果命令依赖服务的专有线程池和请求队列,或者信号量(不使用线程池的时候)已经被占满, 那么 Hystrix 也不会执行命令, 而是转接到 fallback 处理逻辑(第8步)。
6    Hystrix 会根据我们编写的方法来决定采取什么样的方式去请求依赖服务。HystrixCommand.run() :返回一个单一的结果,或者抛出异常。HystrixObservableCommand.construct(): 返回一个Observable 对象来发射多个结果,或通过 onError 发送错误通知。
7    Hystrix会将 "成功"、"失败"、"拒绝"、"超时" 等信息报告给断路器, 而断路器会维护一组计数器来统计这些数据。断路器会使用这些统计数据来决定是否要将断路器打开,来对某个依赖服务的请求进行 "熔断/短路"。
8    当命令执行失败的时候, Hystrix 会进入 fallback 尝试回退处理, 我们通常也称该操作为 "服务降级"。而能够引起服务降级处理的情况有下面几种:第4步: 当前命令处于"熔断/短路"状态,断路器是打开的时候。第5步: 当前命令的线程池、 请求队列或 者信号量被占满的时候。第6步:HystrixObservableCommand.construct() 或 HystrixCommand.run() 抛出异常的时候。
9    当Hystrix命令执行成功之后, 它会将处理结果直接返回或是以Observable 的形式返回。


tips:如果我们没有为命令实现降级逻辑或者在降级处理逻辑中抛出了异常, Hystrix 依然会返回一个 Observable 对象, 但是它不会发射任何结果数据, 而是通过 onError 方法通知命令立即中断请求,并通过onError()方法将引起命令失败的异常发送给调用者。

二、服务监控hystrixDashboard

注意:新版本Hystrix需要在主启动类MainAppHystrix8001中指定监控路径

否则会出现Unable to connect to Command Metric Stream.错误

 

/**
 *此配置是为了服务监控而配置,与服务容错本身无关,springcloud升级后的坑
 *ServletRegistrationBean因为springboot的默认路径不是"/hystrix.stream",
 *只要在自己的项目里配置上下面的servlet就可以了
 */
@Bean
public ServletRegistrationBean getServlet() {
    HystrixMetricsStreamServlet streamServlet = new HystrixMetricsStreamServlet();
    ServletRegistrationBean registrationBean = new ServletRegistrationBean(streamServlet);
    registrationBean.setLoadOnStartup(1);
    registrationBean.addUrlMappings("/hystrix.stream");
    registrationBean.setName("HystrixMetricsStreamServlet");
    return registrationBean;
}

 9001 Pom文件

    <dependencies>
        //引入dashboard依赖
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

9001监控8001

注意,被监控端需要引入actuator依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

 

 

如何看

 

也可以监控多个服务达到以下的状态

 

 

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

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

相关文章

threadLocal的分享

问题描述&#xff1a;1、书城首页的书明明是广告解锁的&#xff0c;但是没有free标识&#xff0c;经过多次接口请求得出结论&#xff0c;相同的请求参数&#xff0c;有时会展示出free标识&#xff0c;有时不会展示free标识问题分析&#xff1a;1、长时间分析也没有得出结论&…

Linux用户及用户组知识总结

✅作者简介&#xff1a;热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏&#xff1a;Java案例分…

SAP 供应商创建默认字段(屏幕格式)后台配置总结

供应商创建默认字段&#xff08;屏幕格式&#xff09;后台配置总结 供应商创建时默认字段&#xff08;屏幕格式的配置在好几个地方的配置来控制。 一 、定义与采购组织特定的屏幕格式 &#xff08;事务代码&#xff1a; OMFK&#xff09; IMG路径为如下图&#xff1a; 在这里…

commons-beanutils的三种利用原理构造与POC

写在前面 commons-beanutils 是 Apache 提供的一个用于操作 JAVA bean 的工具包。里面提供了各种各样的工具类&#xff0c;让我们可以很方便的对bean对象的属性进行各种操作。其中比较常使用的有 MethodUtils/ConstructorUtils/PropertyUtils/BeanUtils/ConvertUtils等。 分析…

Python-文件、eval函数

1.文件的概念和作用1.1文件的概念和作用计算机的文件&#xff0c;就是存储在某种长期储存设备上的一段数据长期存储设备包括&#xff1a;硬盘、U盘、移动硬盘、光盘......文件的作用将数据长期保存下来&#xff0c;在需要的时候使用CPU内存 硬盘1.2文件的存储方式在计算机中&am…

机器视觉_HALCON_HDevelop用户指南_3.用HDevelop采集图像

文章目录三、用HDevelop采集/获取图像3.1. 从文件中读取图像3.2. 查看图像3.3. 图像采集助手3.3.1. 从文件或文件夹中获取图像3.3.2. 通过图像获取接口获取图像3.3.3. 修改生成的代码三、用HDevelop采集/获取图像 本章节标题的英文是Image Acquisition&#xff0c;直译是图像采…

微信小程序跳转页面三种方式

wx.navigateTo 保留当前页面&#xff0c;跳转到应用内的某个页面。但是不能跳到 tabbar 页面。使用 wx.navigateBack 可以返回到原页面。小程序中页面栈最多十层。 wx.navigateBack 关闭当前页面&#xff0c;返回上一页面或多级页面。可通过 getCurrentPages 获取当前的页面…

搜索入门技能树

搜索地址 以下哪个网址不能用来搜索&#xff1a; https://so.csdn.net/so/searchhttps://so.csdn.net/waphttps://devbit.csdn.net/searchhttps://dev.csdn.net/ 搜索频道 以下哪个不属于搜索频道&#xff1a; 全站博客下载图片 技能树 在搜索结果页展示的技能树模块中&am…

51单片机学习笔记-2数码管显示

2 数码管显示 [toc] 注&#xff1a;笔记主要参考B站江科大自化协教学视频“51单片机入门教程-2020版 程序全程纯手打 从零开始入门”。 注&#xff1a;工程及代码文件放在了本人的Github仓库。 2.1 静态数码管显示 2.1.1 原理介绍   LED数码管&#xff1a;数码管是一种简单…

办公技巧:分享7个非常实用的PPT技巧

❤️作者主页&#xff1a;IT技术分享社区 ❤️作者简介&#xff1a;大家好,我是IT技术分享社区的博主&#xff0c;从事C#、Java开发九年&#xff0c;对数据库、C#、Java、前端、运维、电脑技巧等经验丰富。 ❤️荣誉&#xff1a; CSDN博客专家、数据库优质创作者&#x1f3c6;&…

分享14个你可能还未用上但又实用的CSS属性

大家好&#xff0c;今天分享 14 个实用的CSS属性&#xff0c;你可能还未用上&#xff0c;这些 CSS 属性将帮助你提高开发的效率&#xff0c;本篇文章将介绍上半部分&#xff0c;废话不多说&#xff0c;我们快来了解下吧。一、:in-range 和 :out-of-range 伪类:in-range 和 :out…

域内权限维持:DSRM后门

01、简介 每个域控制器都有一个目录还原模式(DSRM)帐户&#xff0c;它的密码是在安装域控时设置的&#xff0c;实际上它对应的就是sam文件里的本地管理员“administrator”&#xff0c;基本很少会被重置&#xff0c;因此有着极强的隐蔽性。攻击者通过获取域控的DSRM密码&#x…

分布式事务| 使用 dotnetcore/CAP 的本地消息表模式

本地消息表模式本地消息表模式&#xff0c;其作为柔性事务的一种&#xff0c;核心是将一个分布式事务拆分为多个本地事务&#xff0c;事务之间通过事件消息衔接&#xff0c;事件消息和上个事务共用一个本地事务存储到本地消息表&#xff0c;再通过定时任务轮询本地消息表进行消…

运放电路中输入失调电压Vos及温漂-运算放大器

实际运放与理想运放具有很多差别&#xff0c;要理解这些差别&#xff0c;就必须认识实际运放的参数。下图是用于描述实际运放几个关键参数的等效模型。模型中&#xff0c;第一个黄色运放是一个近似的理想运放&#xff0c;只有Auo不是无穷大&#xff0c;其余都是理想的。第二个运…

【GD32F427开发板试用】 CAN总线收发测试

本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动&#xff0c;更多开发板试用活动请关注极术社区网站。作者&#xff1a;meijing 这篇测试下CAN通信的收发测试&#xff0c;代码使用库例程中修改。 硬件部分 测试用到了CAN0、串口0和定时器1。 1> CAN0使用的接…

ccflow代码

ccflow代码目录概述需求&#xff1a;设计思路实现思路分析1.什么是流程版本管理&#xff1f;流程讲义&#xff1a;参考资料和推荐阅读Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a better r…

企业如何利用制造业ERP管理系统做好仓库管理?

仓库管理&#xff0c;对于生产制造型企业来说是重中之重&#xff0c;很多制造企业的大部分”身家“&#xff0c;都在仓库里了。众多的原材料和堆积如山的成品、半成品&#xff0c;往往占用了企业大部分的流动资金。来料是否及时&#xff0c;物料是否齐备&#xff0c;库存是否安…

流程引擎与应用系统分布式部署架构

一、为什么应用系统和流程引擎需要分开部署 有句话讲&#xff1a;存在即合理。在实际的企业应用需求里有如下几种场景&#xff0c;需要把业务系统和流程引擎分开部署。 企业流程治理需求。即整个企业只部署一套流程平台BPM&#xff0c;也叫企业级流程中心BPM、或者跨系统端到…

canal数据同步安装、使用

canal源码仓库&#xff1a;https://github.com/alibaba/canal博主使用的是canal 1.5.5版本 MySQL 5.7.32 JDK:1.8 canal各个版本&#xff1a;https://github.com/alibaba/canal/releasescanal-adapter下载 canal-admin 下载 canal-deployer 下载上传到目标服务器对应目录下解压…

初识ros-Navigation

最近一直在看京天Turtlebot3 waffle pi的导航部分&#xff0c;这篇文章就介绍一下相关内容。导航模块是一个独立完整的模块&#xff0c;内容比较多也很深入。因为笔者没有看过源码&#xff0c;只是一些概念上的了解&#xff0c;做个整理&#xff0c;为后续的源码阅读做准备。本…