springCould中的Hystrix【下】-从小白开始【8】

news2024/9/21 16:28:30

目录

🧂1.熔断机制❤️❤️❤️

🌭2.修改8001服务 ❤️❤️❤️

🥞3.测试 ❤️❤️❤️

🥓4. 服务监控hystrixDashboard❤️❤️❤️

 🌭5.仪表盘❤️❤️❤️

🧂6.仪表盘的使用 ❤️❤️❤️


1.熔断机制❤️❤️❤️

  • 熔断机制是应对雪崩效应的一种微服务链路保护机制。
  • 扇出链路的某个微服务出错不可用或者响应时间太长时,会进行服务的降级,进而熔断该节点微服务的调用,快速返回错误的响应信息。当检测到该节点微服务调用响应正常后,恢复调用链路。
  • 在Spring Cloud框架里,熔断机制通过Hystrix实现。
  • Hystrix会监控微服务间调用的状况,当失败的调用到一定阈值,缺省是5秒内20次调用失败,就会启动熔断机制。
  • 熔断机制的注解是@HystrixCommand。

服务的降级->进而熔断->恢复调用链路

2.修改8001服务 ❤️❤️❤️

在controller层添加新的方法

涉及到断路器的三个重要参数:快照时间窗请求总数阀值错误百分比阀值

  • 1:快照时间窗:断路器确定是否打开需要统计一些请求和错误数据,而统计的时间范围就是快照时间窗,默认为最近的10秒。
  • 2:请求总数阀值:在快照时间窗内,必须满足请求总数阀值才有资格熔断。默认为20,意味着在10秒内,如果该hystrix命令的调用次数不足20次,即使所有的请求都超时或其他原因失败,断路器都不会打开。
  • 3:错误百分比阀值:当请求总数在快照时间窗内超过了阀值,比如发生了30次调用,如果在这30次调用中,有15次发生了超时异常,也就是超过50%的错误百分比,在默认设定50%阀值情况下,这时候就会将断路器打开。

    //服务熔断
    @HystrixCommand(fallbackMethod = "paymentCircuitBreaker_fallback", commandProperties = {
            @HystrixProperty(name = "circuitBreaker.enabled", value = "true"),//是否开启断路器
            @HystrixProperty(name = "circuitBreaker.requestVolumeThreshold",value = "10"),//请求次数
            @HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds",value ="10000"),//时间窗口期
            @HystrixProperty(name = "circuitBreaker.errorThresholdPercentage",value = "60"),//失败率达到多少后跳闸
    })
    @GetMapping("/payment/hystrix/errorId/{id}")
    public CommonResult paymentCircuitBreaker(@PathVariable("id") Integer id) {
        if (id < 0) {
            throw new RuntimeException("id不能为负数");
        }
        Payment result = paymentService.getById_ErrorId(id);
        if (result != null) {
            return new CommonResult(200, "查寻成功,端口:" + serverPort + ",线程池:" + Thread.currentThread().getName(), result);
        } else {
            return new CommonResult(404, "查询失败,端口:" + serverPort + ",线程池:" + Thread.currentThread().getName());
        }
    }

    //降级方法
    public CommonResult paymentCircuitBreaker_fallback(@PathVariable("id") Integer id) {
        return new CommonResult(200, "id不能为负,id=" + id);
    }

开启和关闭的条件:

  • 1.当满足一定的阀值的时候(默认10秒内超过20个请求次数)
  • 2.当失败率达到一定的时候(默认10秒内超过50%的请求失败)
  • 3.到达以上阀值,断路器将会开启
  • 4.当开启的时候,所有请求都不会进行转发
  • 5.一段时间之后(默认是5秒),这个时候断路器是半开状态,会让其中一个请求进行转发。如果成功,断路器会关闭,若失败,继续开启。重复4和5 

3.测试 ❤️❤️❤️

当输入id为负数时,刷新浏览器10次,在用正确的id访问,发现仍然错误,过一段时间恢复

4. 服务监控hystrixDashboard❤️❤️❤️

Hystrix提供了准实时调用监控(Hystrix Dashboard) , Hystrix会持续地记录所有通过Hystrix发起的请求的执行信息,并以统计报表和图形的形式展示给用户,包括每秒执行多少请求多少成功,多少失败等。Spring Cloud也提供了Hystrix Dashboard的整合,对监控内容转化成可视化界面。

 5.仪表盘❤️❤️❤️

1.建工程

在父工程下创建9001.注意jdk和maven版本

2.导pom

1.springboot依赖

2.通用依赖

3.dashboard依赖

 <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </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>
        <dependency>
            <groupId>org.example</groupId>
            <artifactId>cloud-api-commons</artifactId>
            <version>${project.version}</version>
        </dependency>

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

3.改yml

只添加服务端口即可

server:
  port: 9001

4.主启动

@EnableHystrixDashboard用于启用Hystrix Dashboard功能

@SpringBootApplication
@EnableHystrixDashboard
public class HystrixDashboardMain9001 {
    public static void main(String[] args) {
        SpringApplication.run(HystrixDashboardMain9001.class);
    }
}

5.测试

访问:localhost:9001/hystrix,看到豪猪页面也搭建成功

6.仪表盘的使用 ❤️❤️❤️

1.加依赖

要监控的服务,一定要导入依赖

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

 2.主启动类

此配置是为了服务监控而配置,与服务容错本身无关,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;
    }

如果不配置,访问时会报错误 

3.测试

解读: 

 

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

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

相关文章

Linux的Inode号和日志服务管理

目录 一、Inode号 1.inode和block 2.查看inode信息 二、日志服务管理 1.日志的级别 2.日志的种类 3.日志的功能和日志文件的分类 4.日志的格式和分析工具 三、rsyslog日志处理系统 1、使用Rsyslog创建日志优点 2、Rsyslog配置文件解析 3.通过rsyslog将ssh服务的日志…

k8s---pod基础下

k8s的pod与docker重启策略的区别 k8s的重启策略 always deployment的yaml文件只能是always&#xff0c;pod的yaml三种模式都可以。不论正常退出还是非正常退出都重启。OnFailure&#xff1a;正常退出不重启&#xff0c;非正常退出会重启Never&#xff1a;正常退出和非正常退出…

宿舍安全用电监控系统解决方案

摘 要&#xff1a;很多高校宿舍的用电功率存在限制,为此设计了宿舍用电智能监控系统。系统由主控制器、采集部分、通信部分组成。利用STM32作为主控芯片,采集部分采用BL0937芯片采集电压和电流,采集多条线路用电数据,各路数据采集通道均采用隔离保护,通信部采用4G、LoRa无线通信…

系统架构设计师教程(十)软件可靠性基础知识

软件可靠性基础知识 10.1 软件架构演化和定义的关系10.1.1 演化的重要性10.1.2 演化和定义的关系 10.2 面向对象软件架构演化过程10.2.1 对象演化10.2.2 消息演化10.2.3 复合片段演化10.2.4 约束演化 10.3 软件架构演化方式的分类10.3.1 软件架构演化时期10.3.2 软件架构静态演…

Dockerfile基本结构及编写详解

文章目录 1 Dockerfile1.1 Dockerfile的基本结构1.2 Dockerfile文件说明1.3 Dockerfile常见命令1.4 build命令1.5 部署微服务1.6 docker-compose部署 1 Dockerfile ​ Dockerfile其实就是我们用来构建Docker镜像的源码&#xff0c;当然这不是所谓的编程源码&#xff0c;而是一…

用通俗易懂的方式讲解:2024 检索增强生成技术(RAG)研究进展

本篇内容1w字左右&#xff0c;稍微有点长&#xff0c;相对不容易理解&#xff0c;喜欢可以收藏、关注、点赞。 一、前言 在过去的一两年里&#xff0c;人工智能领域目睹了检索增强生成技术&#xff08;RAG&#xff09;的迅猛发展&#xff0c;这种技术结合了强大的语言模型与信…

百倍潜力股Aleo即将上线,布局正当时!牛市来时,你得有币!

前言 在加密货币市场&#xff0c;2024年被众多市场专家预测为迎来新一轮牛市的关键年份。这一预测背后&#xff0c;潜藏着多种可能推动牛市的因素。其中&#xff0c;下一次比特币&#xff08;BTC&#xff09;的减半事件&#xff0c;以及2024年 BTC 现货ETF的推出&#xff0c;都…

python统计分析——直方图(sns.histplot)

使用seanborn.histplot()函数绘制直方图 from matplotlib.pyplot as plt import seaborn as snsdata_setnp.array([2,3,3,4,4,4,4,5,5,6]) plt.hist(fish_data) &#xff08;1&#xff09;dataNone, 表示数据源。 &#xff08;2&#xff09;xNone, 表示直方图的分布垂直与x轴…

UG装配-爆炸图

当我们将零件装配成总成的时候&#xff0c;通常需要绘制爆炸图来说明总成零件组成&#xff0c;需要用到爆炸图命令&#xff0c;首先点击新建爆炸&#xff0c;然后为爆炸图命名 然后我们可以选择编辑爆炸或者自动爆炸&#xff1a; 编辑爆炸是通过手动的方式选择部件&#xff0c…

岁月匆匆,技术之光

岁月匆匆&#xff0c;技术之光 博主 默语带您 Go to New World. ✍ 个人主页—— 默语 的博客&#x1f466;&#x1f3fb; 《java 面试题大全》 &#x1f369;惟余辈才疏学浅&#xff0c;临摹之作或有不妥之处&#xff0c;还请读者海涵指正。☕&#x1f36d; 《MYSQL从入门到精…

【洛谷学习自留】p9226 糖果

解题思路&#xff1a; 简单的计算题&#xff0c;用n对k取余&#xff0c;如果余数为0&#xff0c;则输出k的值&#xff0c;否则输出&#xff08;k-余数&#xff09;的值。 代码实现&#xff1a; import java.util.Scanner;public class p9226 {public static void main(Strin…

2024年如何借用电商新零售破局?新型商业模式——乐享甄选竞拍模式

2024年如何借用电商新零售破局&#xff1f;新型商业模式——乐享甄选竞拍模式 背景&#xff1a;经历疫情三年的黑天鹅&#xff0c;消费者对未来收入预期和不自信等悲观情绪&#xff0c;从而使得“勒紧腰带&#xff0c;少消费&#xff0c;不消费”&#xff0c;以简单实用成为了新…

全栈自动化测试面试题含答案和学习路线(适合各级软件测试人员)

在面试战场上&#xff0c;我们需要像忍者一样灵活&#xff0c;像侦探一样聪明&#xff0c;还要像无敌铁金刚一样坚定。只有掌握了这些技巧&#xff0c;我们才能在面试的舞台上闪耀光芒&#xff0c;成为那个令HR们心动的测试人 前言&#xff1a; 我相信大多测试开发的或多或少经…

图像去噪——CBDNet网络训练自己数据集及推理测试,模型转ONNX模型(详细图文教程)

CBDNet 主要由两个子网络组成&#xff1a;噪声估计子网络和去噪子网络。噪声估计子网络用于估计图像的噪声水平&#xff0c;而去噪子网络用于去除图像中的噪声。 CBDNet 的优势在于&#xff1a; 它采用了更真实的噪声模型&#xff0c;既考虑了泊松-高斯模型&#xff0c;还考虑…

01.Typora1.7.6安装以及更换主题方法

重所周知&#xff0c;程序员的笔记资料有多么重要&#xff0c;不仅是自我提升也是加强记忆 那么一定少不了Typora这个软件 今天就来感受一下它应该如何打开正确的安装的方法。 双击文件夹以后&#xff0c;里面会有这样两个文件 我们双击后缀为.exe的文件 更改安装位置&#…

程序员副业之AI情侣头像(手把手超详细完整全流程)

项目介绍 小黑今天给咱们分享个轻松简单的项目&#xff0c;每天不会超过半小时&#xff0c;就是用AI制作情侣头像&#xff0c;在抖音上变现。听起来是不是很科幻&#xff1f;但实际上效果杠杠的&#xff01; 最关键的是&#xff0c;收入方面&#xff0c;一单9块9&#xff0c;…

智能计价器Scratch-第14届蓝桥杯Scratch省赛真题第5题

5. 智能计价器&#xff08;80分&#xff09; 背景信息&#xff1a;A城市的出租车计价&#xff1a;3公里以内13元&#xff0c;基本单价每公里2.3元(超过3公里的部分&#xff0c;不满1公里按照1公里收费&#xff09;&#xff0c;燃油附加费每运次1元。例如&#xff1a;3.2公里的…

js数组循环,当前循环完成后执行下次循环

前言 上图中&#xff0c;点击播放icon&#xff0c;图中左边地球视角会按照视角列表依次执行。u3D提供了api,但是我们如何保证在循环中依次执行。即第一次执行完成后&#xff0c;再走第二次循环。很多人的第一思路就是promise。对&#xff0c;不错&#xff0c;出发的思路是正确的…

数据结构初阶之栈和队列(C语言版)

数据结构初阶之栈和队列&#xff08;C语言版&#xff09; ✍栈♈栈的结构设计♈栈的各个接口的实现&#x1f47a;StackInit(初始化)&#x1f47a;push&#xff08;入栈&#xff09;&#x1f47a;pop&#xff08;出栈&#xff09;&#x1f47a;获取栈顶元素&#x1f47a;获取栈中…

【LeetCode】20. 有效的括号(Deque的Stack用法)

今日学习的文章链接和视频链接 leetcode题目地址&#xff1a;20. 有效的括号 代码随想录题解地址&#xff1a;代码随想录 题目简介 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效。 有效…