服务熔断的实现

article/2025/9/25 18:32:58
# 0.服务熔断的实现思路
- 引入hystrix依赖,并开启熔断器(断路器)
- 模拟降级方法
- 进行调用测试
# 1.项目中引入hystrix依赖 
<!--引入hystrix-->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
# 2.开启断路器
@SpringBootApplication
@EnableCircuitBreaker  //用来开启断路器
public class Products9998Application {public static void main(String[] args) {SpringApplication.run(Products9998Application.class, args);}
}
# 3.使用HystrixCommand注解实现断路
//服务熔断
@GetMapping("/product/break")
@HystrixCommand(fallbackMethod = "testBreakFall" )
public String testBreak(int id){log.info("接收的商品id为: "+ id);if(id<=0){throw new RuntimeException("数据不合法!!!");}return "当前接收商品id: "+id;
}public String testBreakFall(int id){return "当前数据不合法: "+id;
}

# 4.访问测试
- 正常参数访问
- 错误参数访问

# 5.总结
- 从上面演示过程中会发现如果触发一定条件断路器会自动打开,过了一点时间正常之后又会关闭。那么断路器打开条件是什么呢?

# 6.断路器打开条件
- 官网: https://cloud.spring.io/spring-cloud-netflix/2.2.x/reference/html/#circuit-breaker-spring-cloud-circuit-breaker-with-hystrix

A service failure in the lower level of services can cause cascading failure all the way up to the user. When calls to a particular service exceed circuitBreaker.requestVolumeThreshold (default: 20 requests) and the failure percentage is greater than circuitBreaker.errorThresholdPercentage (default: >50%) in a rolling window defined by metrics.rollingStats.timeInMilliseconds (default: 10 seconds), the circuit opens and the call is not made. In cases of error and an open circuit, a fallback can be provided by the developer. --摘自官方

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

# 面试重点问题: 断路器流程

# 7.默认的服务FallBack处理方法
- 如果为每一个服务方法开发一个降级,对于我们来说,可能会出现大量的代码的冗余,不利于维护,这个时候就需要加入默认服务降级处理方法

@GetMapping("/product/hystrix")
@HystrixCommand(fallbackMethod = "testHystrixFallBack") //通过HystrixCommand降级处理 指定出错的方法
public String testHystrix(String name) {log.info("接收名称为: " + name);int n = 1/0;return "服务[" + port + "]响应成功,当前接收名称为:" + name;
}
//服务降级处理
public String testHystrixFallBack(String name) {return port + "当前服务已经被降级处理!!!,接收名称为: "+name;
}


http://chatgpt.dhexx.cn/article/Wd6XM8Di.shtml

相关文章

熔断

我们知道&#xff0c;如果一个软件系统的并发请求数目超过了系统的最佳线程数&#xff0c;那么就会导致激烈的资源竞争&#xff0c;随着资源的匮乏甚至枯竭&#xff0c;整个系统也就面临着灾难。所以&#xff0c;很多软件系统为了保证即使在出现并发用户数>最佳线程数时&…

什么是服务熔断?

一、什么是服务熔断&#xff1f; 考试过程中当断则断的方式&#xff0c;正好符合微服务架构中的一种安全机制&#xff1a;【熔断】 熔断这一概念来源于电子工程中的断路器&#xff08;Circuit Breaker&#xff09;。 在互联网系统中&#xff0c;当下游服务因访问压力过大而响应…

熔断原理分析与源码解读

熔断机制&#xff08;Circuit Breaker&#xff09;指的是在股票市场的交易时间中&#xff0c;当价格的波动幅度达到某一个限定的目标&#xff08;熔断点&#xff09;时&#xff0c;对其暂停交易一段时间的机制。此机制如同保险丝在电流过大时候熔断&#xff0c;故而得名。熔断机…

【C++程序设计语言A视频教程 全12讲 中科院】【下载链接】

C程序设计语言A视频教程 全12讲 中科院 这个是我在淘宝上面买的 杨力祥老师的教程~~ 奉献给大家~~~ *************************************************************************************************************************************** 下面是网上对杨力祥老师的…

国科大杨力祥老师操作系统答案总结

基于网上搜索的版本以及历届师兄的版本&#xff0c;进行了整合和修改 对应参考书籍如下&#xff0c;对应P页数也是指该书的页数。 1.为什么开始启动计算机的时候&#xff0c;执行的是BIOS代码而不是操作系统自身的代码&#xff1f; 最开始启动计算机的时候&#xff0c;计算机…

简述Mean shift 算法及其实现

文章目录 Mean shift 是什么Mean shift 算法的预备知识什么是特征什么是特征空间什么是核密度估计核函数的表示 Mean shift 算法Mean shift算法的公式推导Mean shift算法的流程Mean shift算法图示 Mean shift 算法应用Mean Shift 算法应用在聚类Mean Shift 算法图像分割 Mean s…

Johnson-Trotter算法求全排列

下面我将贴出Johnson-Trotter算法的JAVA代码 package JT;import java.util.Scanner;public class Johnson_Trotter {//求最大的移动元素public static int maxk(int n, int[] array, boolean[] f) {//k存储最大移动元素的下标int k -1, max 0;for(int i 0; i < n; i) {/…

全源最短路Johnson算法

最短路Johnson算法( O ( n m l o g m ) O(nmlogm) O(nmlogm)) 可以求任意两点最短路&#xff0c; 新图的边权改造为&#xff1a; w ( x , y ) h ( x ) − h ( y ) w(x,y)h(x)-h(y) w(x,y)h(x)−h(y) 构造的新图 d 1 ( x , y ) d ( x , y ) h ( x ) − h ( y ) d1(x,y)d(x,y…

流水线作业调度问题-动态规划(运用Johnson算法)

问题描述 n个作业{1&#xff0c;2&#xff0c;…&#xff0c;n},要在由机器M1和M2组成的流水线上完成加工。每个作业加工的顺序都是先在M1上加工&#xff0c;然后在M2上加工。M1和M2加工作业i所需的时间分别为ai和bi。 要求确定这n个作业的最优加工顺序&#xff0c;使得从第一…

【随机算法】Johnson-Lindenstrauss Theorem 详细解读

前言 最近经常接触降维, 主要是做图像处理和视频处理的维度实在是比较多, 降维这个可真是真正的技术活儿, 而且在不同情况下降维的选择至关重要, 可以说会影响到最终的结果,今天主要是详细讲解一下其中一种当今的降维准则. Johnson-Lindenstrauss Theorem的问题定义 首先, JL要…

最短路径算法--Dijkstra算法,Bellmanford算法,Floyd算法,Johnson算法

最短路径算法 在交通地图上&#xff0c;两地点之间的路径通常标有长度&#xff0c;我们可以用加权有向来描述地图上的交通网。加权有向图中每条路径都有一个路径权值&#xff0c;大小为该路径上所有边的权值之和。本节将重点讨论顶点之间最短路径问题。在实际问题中&#xff0c…

在有向图中找出所有简单环--Johnson算法

注&#xff1a;本算法和计算图所有结点对最短路径的Johnson算法不同。 目录 综述 代码解析 实例解析 引用 综述 Johnson算法由B. Johnson发表于1975年&#xff0c;用于在一个有向图中寻找所有简单环。时间复杂度上界为O((ne)(c1))&#xff0c;空间复杂度为O(ne)&#xff0…

C#,图论与图算法,寻找加权有向图中所有顶点对之间的最短路径的约翰逊算法(Johnson‘s Algorithm)与源程序

一、最短路径问题 问题是找到给定加权有向图中每对顶点之间的最短路径&#xff0c;权重可能为负。我们已经讨论了这个问题的Floyd-Warshall算法。Floyd-Warshall算法的时间复杂度为Θ&#xff08;V3&#xff09;。利用Johnson算法&#xff0c;我们可以在O&#xff08;V2log VV…

最短路径算法——Dijkstra,Bellman-Ford,Floyd-Warshall,Johnson

本文内容框架&#xff1a; 1 Dijkstra算法 2 Bellman-Ford算法 3 Floyd-Warshall算法 4 Johnson算算法 5 问题归约 6 小结 常用的最短路径算法有&#xff1a;Dijkstra算法、Bellman-Ford算法、Floyd-Warshall算法、Johnson算法 最短路径算法可以分为单源点最短路径和全源最短路…

0018算法笔记——【动态规划】流水作业调度问题与Johnson法则

1、问题描述&#xff1a; n个作业{1&#xff0c;2&#xff0c;…&#xff0c;n}要在由2台机器M1和M2组成的流水线上完成加工。每个作业加工的顺序都是先在M1上加工&#xff0c;然后在M2上加工。M1和M2加工作业i所需的时间分别为ai和bi。流水作业调度问题要求确定这n个作业的…

转:johnson算法的现实意义

Johnson算法是一种用于解决边数与节点数之间关系为O(n^2)的带权图的最短路径问题的算法。它是一种结合了Dijkstra算法和Bellman-Ford算法的技术&#xff0c;通过使用一个负权重的环检测器来消除负权重的影响。这种算法的时间复杂度为O(n^2m log n)。 Johnson算法是一种用于解决…

软件定义网络SDN基础实验:MiniNet常用命令、创建网络拓扑、OpenFlow流表操作

此实验基于《软件定义网络实验1-5》&#xff0c;主要内容为&#xff1a; MiniNet常用命令如何创建网络拓扑OpenFlow流表操作 00x1 搭建SDN环境 SDN 环境配置&#xff1a;Mininet Ryu 1. 测试环境是否搭建成功 启动Ryu&#xff0c;进入 /ryu/app&#xff0c;启动一个交换机…

软件定义网络基础(SDN②)

一.传统网络设备 1.传统设备控制平面和数据平面 2.数据平面的任务 在传统网络中&#xff0c;数据平面是指实际传输和处理数据的部分。它包括网络设备&#xff08;如交换机和路由器&#xff09;&#xff0c;它们通过将数据包从一个接口转发到另一个接口来实现数据传输。数据平面…

软件定义网络SDN

一、为什么使用软件定义网络 传统网络及其设备只可配置&#xff0c;不可编程。网络的分布式控制与管理架构带来的制约&#xff0c;网络的部署、配置与管理需要落到每台设备上去手工完成&#xff0c;每个设备下都紧耦合了三个平面&#xff08;管理平面、控制平面、数据平面&…