Spring Cloud 之 Ribbon,Spring RestTemplate 调用服务使用Hystrix熔断器
在服务调用中增加Hystrix熔断器,是在单个服务出现故障的时候快速失败,也可以提供回退方案,避免因为线程等待耗尽整个服务的线程资源;Hystrix DashBoard监控组件,可以实时监控熔断器的状态。
在之前操作的基础上,在eurekaclient中调用logservice的API,
1、maven依赖
<!--hystrix 依赖包--> <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix</artifactId> </dependency> <!--hystrix DashBoard 依赖包--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId> </dependency>
2、启动类上添加注解,
@EnableHystrix @EnableHystrixDashboard
@EnableHystrix注解包含了@EnableCircuitBreaker注解,所以这里不需要再添加@EnableCircuitBreaker
3、启动类中注册一个Bean,
@Bean public ServletRegistrationBean getServlet() {HystrixMetricsStreamServlet streamServlet = new HystrixMetricsStreamServlet();ServletRegistrationBean registrationBean = new ServletRegistrationBean(streamServlet);registrationBean.setLoadOnStartup(1);registrationBean.addUrlMappings("/actuator/hystrix.stream");registrationBean.setName("hystrixStreamServlet");return registrationBean; }
配置文件增加如下内容:
hystrix:dashboard:proxy-stream-allow-list: "*"
4、在eurekaclient服务中写一个API接口,
@GetMapping("getClientInfo2") public String getClientInfo2() {String info = "log info2";return logServiceClient.logInfo2(info); }
Service层新增一个方法,
@HystrixCommand(commandProperties = {@HystrixProperty(name="execution.isolation.thread.timeoutInMilliseconds",value="2000")},fallbackMethod = "logInfoFallback") public String logInfo2(String logInfo) {return restTemplate.getForObject("http://logservice/log/logInfo2?logInfo="+logInfo, String.class); }
其中,@HystrixProperty(name="execution.isolation.thread.timeoutInMilliseconds",value="3000") 设置服务调用超时时间为3s,默认1s,
fallbackMethod = "logInfoFallback" 指定回退方法,也就是服务调用失败后返回的信息,是服务降级的一种方式,
public String logInfoFallback(String logInfo) {return "loginfo service timeout"; }
5、在logservice中写一个API,用于eurekaclient服务调用,
@GetMapping("logInfo2") public String logInfo2(String logInfo) throws InterruptedException {TimeUnit.SECONDS.sleep(2L);System.out.println(logInfo);return logInfo; }
6、启动logservice两个实例,
7、浏览器中输入 http://localhost:8080/client/getClientInfo2, 查看接口返回信息,
8、浏览器中输入 http://localhost:8080/hystrix,
在Hystrix Dashboard下方的输入框中输入http://localhost:8080/actuator/hystrix.stream,
端口号后面的地址也就是在第3步中注入的ServletRegistrationBean里配置registrationBean.addUrlMappings("/actuator/hystrix.stream"),这两个地方要一致,
title输入内容随意,然后单击Monitor Stream,进入熔断器监控页面,
9、测试
调用http://localhost:8080/client/getClientInfo2接口,也就是通过@HystrixCommand注解的方法,多调用几次,然后在熔断器监控页面可以看到如下类似的画面:
10、将@HystrixProperty(name="execution.isolation.thread.timeoutInMilliseconds",value="2000",出现服务调用超时问题,
调用http://localhost:8080/client/getClientInfo2接口,提示loginfo service timeout,也就是用到了Hystrix的后备方法
Spring Cloud 之 Ribbon,Spring RestTemplate 调用服务使用Hystrix熔断器相关推荐
- Spring Cloud入门-Ribbon服务消费者(Hoxton版本)
文章目录 Spring Cloud入门系列汇总 摘要 Ribbon简介 RestTemplate的使用 GET请求方法 getForObject方法 getForEntity方法 POST请求方法 p ...
- Spring Cloud Eureka 入门 (三)服务消费者详解
2019独角兽企业重金招聘Python工程师标准>>> 摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! "真正的进步 ...
- spring cloud 之 Ribbon
1.Ribbon是什么 Spring Cloud Ribbon 是一套基于 Netflix Ribbon 实现的客户端负载均衡和服务调用工具.Netflix Ribbon 是 Netflix 公司发布 ...
- Spring Cloud应用接入华为云微服务CSE
概述 Spring Cloud应用可以方便的接入CSE提供的基础服务.接入CSE服务有如下好处: 开发者可以专注于业务系统的开发,把精力从中间件的可靠性评估.集群部署.运维监控等复杂的事情中解放出来. ...
- 【Spring Cloud Alibaba】Spring Cloud Alibaba 服务注册与发现实践
1. 简介 服务注册与发现是微服务架构体系中最关键的组件之一.如果尝试着用手动的方式来给每一个客户端来配置所有服务提供者的服务列表是一件非常困难的事,而且也不利于服务的动态扩缩容.Nacos Disc ...
- spring cloud整合Ribbon
spring cloud整合Ribbon 使用Eureka中自带的Ribbon 如果你使用的是Eureka做服务发现和注册的话,在比较新版本的Eureka中,Eureka已经集成了Ribbon进入Eu ...
- spring解耦_云端时代的解耦:使用Spring Cloud Azure构建云端原生微服务
spring解耦 重要要点 云本机应用程序应充分利用云的优势,而不仅仅是迁移到云中 通过在云计算环境上运行,微服务与云原生环境并驾齐驱 集中配置,服务发现,异步消息驱动和分布式跟踪是微服务基础架构 S ...
- Spring Cloud Alibaba 学无止境:下一代微服务架构的规划与展望
终于到了课程的最后一讲,本讲我们将对整个微服务架构和 Spring Cloud Alibaba 进行总结和展望.Spring Cloud Alibaba 是优秀的国产微服务架构解决方案,在基于 Spr ...
- Dubbo将积极适配Spring Cloud生态,Spring Cloud体系或将成为微服务的不二选择!
2016年,我在博客中发表过一篇<微服务架构的基础框架选择:Spring Cloud还是Dubbo?>(http://blog.didispace.com/microservice-fra ...
最新文章
- 9开启线程日志_GC 日志分析
- Loadrunner11如何使用非IE浏览器录制脚本
- 抽奖算法-指定概率的随机
- [完整代码]创建不受数据库限制的报表 VB.Net 版本 -1
- 推荐系统(工程方向)-策略平台
- 好语言,就该善用它——《C++语言的设计与演化》读书笔记
- CRM Fiori launchpad请求响应结果的字段分析
- 基于ABP落地领域驱动设计-06.正确区分领域逻辑和应用逻辑
- 107. 二叉树的层序遍历 II and 102. 二叉树的层序遍历 023(BFS模板题打两道)
- RIP RETE时间获得PHREAKY
- python列表各元素修改为int类型
- 一元线性回归 R语言
- 百度地图根据缩放级别显示不同的marker点和窗口内容
- [PowerQuery]Excel 如何开启PowerQuery组件
- 仿真软件测试报告,仿真软件实验实验报告.doc
- java:记一次因时区导致出参和入参时差8小时前因后果
- SpringBoot 2.X Redis Jackson 序列化配置
- css中只读,是否可以通过CSS将输入字段设置为只读?
- 求1到100之间所有能被3整除的整数的和
- 51单片机 IIC OLED屏幕驱动+Proteus仿真+实物验证示例程序
热门文章
- Android人脸识别开发入门--基于虹软免费SDK实现
- dhcp软件_DHCP和DNS是什么 二者有何区别?
- 从汇编代码的角度观察switch与if...else,乘除与移位的差别
- 生产者消费者_Kafka之生产者/消费者
- 双稳态电路的两个稳定状态是什么_利用SR锁存器实现SPDT开关消抖电路
- 计算机会计学实验报告,最新计算机会计学实验报告-10本.doc
- Unity3D 使用 GL 绘制线条
- laravel 5 自定义全局函数,怎么弄呢?
- [原]Java程序员的JavaScript学习笔记(7——jQuery基本机制)
- Nmap绕过防火墙脚本的使用