【5】JMicro微服务-熔断降级
如非授权,禁止用于商业用途,转载请注明出处
作者:mynewworldyyl
1. 使用服务熔断降级特性,必须先启动Pubsub服务,服务监听服务,熔断器服务3个服务
先启动Pubsub及服务监听两个服务,先不用管其细节,启动的方式都是一样的,先构建(如果还没有构建),然后启动
1.1 启动Pubsub
新打开一个新的CMD窗口,CD进入/jmicro.pubsub,运行
mvn clean install -Pbuild-main (只需构建一次,以后可以重复运行)
运行pubsub服务
java -jar target/jmicro.pubsub-0.0.1-SNAPSHOT-jar-with-dependencies.jar
1.2 启动服务监听服务
新打开一个新的CMD窗口,CD进入/jmicro.main.monitor.exception,运行
mvn clean install -Pbuild-main (只需构建一次,以后可以重复运行)
运行pubsub服务
java -jar target/jmicro.main.monitor.exception-0.0.1-SNAPSHOT-jar-with-dependencies.jar
1.3 启动熔断器服务
新打开一个新的CMD窗口,CD进入/jmicro.breaker,运行
mvn clean install -Pbuild-main (只需构建一次,以后可以重复运行)
运行breaker服务
java -jar target/jmicro.breaker-0.0.1-SNAPSHOT-jar-with-dependencies.jar
2. 开发支持可熔断服务
同样基于org.jmicro.example.rpc.impl.SimpleRpcImpl开发,hello方法的SMethod增加属性实现。
@Service(maxSpeed=-1,baseTimeUnit=Constants.TIME_SECONDS) @Component public class SimpleRpcImpl implements ISimpleRpc { @Override @SMethod( //1秒钟内异常超50%,熔断服务,熔断后每80毫秒做一次测试 breakingRule = @SBreakingRule(enable=true,breakTimeInterval=1000,percent=50,checkInterval=80), testingArgs="gv/9gwAQamF2YS5sYW5nLk9iamVjdAABgf/8AApBcmUgeW91IE9L",//测试参数 monitorEnable=1,//启动监听 timeWindow=30*1000,//统计时间窗口30S checkInterval=2000,//采样周期2S baseTimeUnit=Constants.TIME_MILLISECONDS ) public String hello(String name) { if(SF.isLoggable(true,MonitorConstant.LOG_DEBUG)) { SF.doBussinessLog(MonitorConstant.LOG_DEBUG,SimpleRpcImpl.class,null, name); } System.out.println("Server hello: " +name); return "Server say hello to: "+name; } }
相关属性解析
monitorEnable:启用服务监听,这样系统会将hello方法的实时运行数据上报到监听服务器,监听服务器统计出相关指标数据(如请求失败率),最后监听服务器通过pubsub服务器将数据发布出去,Breaker服务收到服务的指标数据后根据服务的配置信息判断是否需要熔断服务。1表示启用,0表示禁用,-1表示由Service配置确定。
baseTimeUnit:基本时间单位,Constants.TIME_MILLISECONDS表示毫秒,其他值参考Constants.TIME_打头的值。
timeWindow:服务数据统计时间段长度,单位由baseTimeUnit确定,如30000,表示30000毫秒,表示监听服务器保持hello服务最近30秒的统计数据,超过30秒的数据自动丢弃,qps=当前保持的数据总和/timeWindow(30000转换为秒)。
checkInterval:表示监听服务器上报统计数据到pubsub服务时间间隔,2000表示每两秒上报一次,意味着熔断器每两秒收到一次数据并对服务做熔断判断。
testingArgs:测试参数,服务熔断后,正常的前端RPC请求将在客户端被直接拒绝(快速失败),不会请求到服务端(也就是没有网络数据传输)。但是熔断器服务要对hello服务做恢复判断,同样需要监听服务统计数据并通过pubsub服务通知熔断器实现。实现方式是服务熔断后,熔断器会每间隔一个时间以testingArgs为参数调用hello服务,这样服务监听器就有hello服务统计数据并上报到熔断器,熔断器判断成功率是否达到指定值,如果达到,就关闭服务熔断,客户端又可以正常使用服务。
testingArgs参数生成方式:
public static void main(String[] args) { ISimpleRpc sayHelloSrv = JMicro.getRpcServiceTestingArgs(ISimpleRpc.class); sayHelloSrv.hello("Are you OK"); }
运行这段代码后,控制台会输出一个字符串,这个字符串就是testingArgs的值,如下图,这个字符串所代表的基实就是“How are you”编码后的值。也许你会问为什么不直接给testingArgs直接赋值“How are you”?因为RPC方法支持各种类型的参数,并且参数的数量也可以多个,直接赋值给testingArgs基本不可能。
特别注意:支持熔断的方法必须确保服务方法接收到这个参数的请求不影响正常的业务逻辑,这是一个测试。
breakingRule:是一个内嵌注解,表示熔断规则,其内部分为如下属性
enable:是否启用规则,true表示启用,false表示禁用。只有启用服务才支持熔断。
percent:熔断与不熔断时的临界值,RPC服务失败率大于或等于此值时,服务熔断,否则不熔断。
checkInterval:服务熔断后,每间隔多长时间做一次测试,以testingArgs为参数。
3. 做以上配置后,构建provider
打开命令行窗口
进入provider目录
cd ${SRC_ROOT}\jmicro.example\jmicro.example.provider
构建运行包
mvn clean install -Pbuild-main
运行服务
java -jar target/jmicro.example.provider-0.0.1-SNAPSHOT-jar-with-dependencies.jar
4. 修改运行消费方,对熔断服务进行测试
pom.xml将压测试Main类打开
<manifest> <!-- <mainClass>org.jmicro.example.comsumer.ServiceComsumer</mainClass> --> <mainClass>org.jmicro.example.comsumer.PressureTest</mainClass> </manifest>
打开一个新命令行窗口
进入comsumer目录
cd ${SRC_ROOT}\jmicro.example\jmicro.example.comsumer
构建运行包
mvn clean install
运行:
java -jar target/jmicro.example.comsumer-0.0.1-SNAPSHOT-jar-with-dependencies.jar
此时分别观察消费方,服务方,服务监听方,Pubsub,Breaker窗口的输出?
可以服务方法hello内抛出异常,Sleep指定时长(让服务超时),来测试服务熔断,自行修改测试
【5】JMicro微服务-熔断降级的更多相关文章
- 聊聊微服务熔断降级Hystrix
在现在的微服务使用的过程中,经常会遇到依赖的服务不可用,那么如果依赖的服务不可用的话,会导致把自己的服务也会拖死,那么就产生了熔断,熔断顾名思义就是当服务处于不可用的时候采取半开关的状态,达到一定数量 ...
- 【13】JMicro微服务-ID生成与Redis
如非授权,禁止用于商业用途,转载请注明出处作者:mynewworldyyl 往下看前,建议完成前面1到12小节 1. 微服务中ID地位 如果说前面小节的功能点是微服务的大脑,那么全局唯一ID则是微服务 ...
- 【12】JMicro微服务-Zookeeper
如非授权,禁止用于商业用途,转载请注明出处作者:mynewworldyyl 往下看前,建议完成前面1到11小节 1. CuratorFramework支持 JMicro目前基于Zookeeper实现统 ...
- 【11】JMicro微服务-配置管理
如非授权,禁止用于商业用途,转载请注明出处作者:mynewworldyyl 往下看前,建议完成前面1到10小节 JMicro目前仅支持基于Zookeeper做配置管理,全部配置信息可以在ZK做增删改查 ...
- JMicro微服务之超时&重试
JMicro是本人开发的基于Java实现的微服务框架,当前正式版本为0.0.3,并已发布到maven中央仓库.项目源码github:https://github.com/mynewworldyyl/j ...
- 【3】JMicro微服务-服务超时,重试,重试间隔
如非授权,禁止用于商业用途,转载请注明出处作者:mynewworldyyl 接下来的内容都基于[2]JMicro微服务-Hello World做Demo 微服务中,超时和重试是一个最基本问题下面Dem ...
- 【10】JMicro微服务-API网关
如非授权,禁止用于商业用途,转载请注明出处作者:mynewworldyyl 往下看前,建议完成前面1到9小节 1. Api网关基本特性: Api网关作为对外网提供服务的基本入口,地位类似于NGINX, ...
- 【8】JMicro微服务-JMicro ZKUI
ZKUI是一个开源项目,是一个查看,修改ZK数据非常方便的工具.JMicro基于ZK做服务治理,配置管理,因此使用ZKUI会提供非常大的方便. Github地址:https://github.com/ ...
- 【2】JMicro微服务-Hello World
如非授权,禁止用于商业用途,转载请注明出处作者:mynewworldyyl 1. 首先完成 JMicro微服务-RPC体验 的1到5步. 按默认方式启动ZK及Redis: JDK需要Java8及以上. ...
随机推荐
- Idea中如何将web项目打包成war包并放到tomcat中启动
第一步:在idea中选中Artifacts.右侧勾选Build on make生成war包,如下图 第二步:将target文件夹里面的war包拷贝到tomcat文件下的webapp目录下 第三步:修改 ...
- IPython:一种交互式计算和开发环境(魔术命令,快捷键)
%run命令 在IPython会话环境中,所有文件都可以通过%run命令当做Python程序来运行. 假设在ipython_script_test.py中存放了一段简单的脚本,如下所示: def f( ...
- 最全js表单验证
/***************************************************************** 表单校验工具类 (linjq) ***************** ...
- 第26章:MongoDB-索引
①索引 索引本质上是树,最小的值在最左边的叶子上,最大的值在最右边的叶子上,使用索引可以提高查询速度(而不用全表扫描),也可以预防脏数据的插入(如唯一索引). 索引通常能够极大的提高查询的效率,如果没 ...
- php常量 const 和 define
常量是一个简单的标识符.在脚本执行期间该值不能改变(除了所谓的魔术常量,他们其实不是常量).常量默认大小写敏感.通常常量标识符总是大写的. 可以用define()函数来定义常量.在php5.3.0以后 ...
- 知识点:定义input type=file 样式的方法(转)
——“当我们想要用css美化表单的时候,有两个控件就会和前段人员作对,一个是是大名鼎鼎的select,另一个就是我现在要说说的 input type=file” 为什么要美化file控件?试想一下,别 ...
- day17(tomcat的安装,HTTP)
Tomcat Tomcat是个小型服务器,由apache组织编写,转为发布java程序而写. 安装步骤: 官网:http://tomcat.apache.org/ 下载地址:http://tomcat ...
- _编程语言_C++_Lambda函数与表达式
C++11提供了对匿名函数的支持,称为Lambda表达式函数 Lambda 表达式把函数看作对象.Lambda 表达式可以像对象一样使用,比如可以将它们赋给变量和作为参数传递,还可以像函数一样对其求值 ...
- noip第2课资料
- 02:OC和C对比
1.源文件对比 C语言中常见源文件.h头文件,.c文件 文件扩展名 源类型 .h 头文件,用于存放函数声明 .c C语言源文件,用于实现头文件中声明的方法 OC中的源文件.h头文件,.m与.mm的实现 ...