Spring Cloud实战之初级入门(四)— 利用Hystrix实现服务熔断与服务监控
1.环境介绍
本篇文章涉及到前面文章的工程,mirco-service-provider、mirco-service-consumer以及需要另外新建一个工程mirco-service-turbine-hystrix-dashbord。
2.服务监控
2.1 加入依赖
为“mirco-service-provider”工程的pom文件中加入
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
</dependency>
2.2 修改配置文件
这里有点东西需要跟小伙伴们说明,因为上一篇文章SpringCloud实战之初级入门(三)— spring cloud config搭建git配置中心中,我们将服务提供的工程配置文件上传到了github上,那么我们需要修改github上provider.yml,这是第一种方法。第二种方法是直接在bootstrap.yml中加入我们想要的配置,也是一样的生效,如果不明白我这里写了什么,可以看我的视频。我们这里介绍第一种方法:
在工程目录打开命令行
使用vi provider.yml编辑配置文件
保存配置文件
使用"git status"查看我们工程中哪些文件进行了修改
使用"git add provider-test.yml"加入本地仓库的提交列表
使用"git commit -m '提交说明'"将要提交的文件提交到本地仓库
使用"git push origin master"已经提交到本地仓库的文件上传至远程仓库。
2.3 修改启动文件
在启动文件中加上"@EnableHystrixDashboard 、@EnableCircuitBreaker"注解,然后启动工程。
打开浏览器访问http://localhost:7001/hystrix,可以看到如下图内容,说明服务调用的监控就搭建完成了。
2.4 监控服务
我在网络上看了一下,很多教程让你在输入框中输入http://localhost:8001/hystrix.stream然后点击下面的"monitor stream" 按钮基本上就完了,但是在我的环境里面是不行的,可能是spring cloud和spring boot的版本不一样。下面用步骤讲一下怎么做监控:
在浏览器的地址栏中输入http://localhost:8001/hystrix.stream是无法访问的,因为我们没有将“/hystrix.stream”这目录加入工程的访问目录。
修改启动文件如下:
@EnableHystrixDashboard
@EnableCircuitBreaker
@EnableDiscoveryClient
@SpringBootApplication
public class MircoServiceProviderApplication {
public static void main(String[] args) {
SpringApplication.run(MircoServiceProviderApplication.class, args);
}
@Bean
public ServletRegistrationBean<HystrixMetricsStreamServlet> getServlet() {
HystrixMetricsStreamServlet hystrixMetricsStreamServlet = new HystrixMetricsStreamServlet() ;
ServletRegistrationBean<HystrixMetricsStreamServlet> servletRegistrationBean = new ServletRegistrationBean<HystrixMetricsStreamServlet>() ;
servletRegistrationBean.setServlet(hystrixMetricsStreamServlet);
servletRegistrationBean.setLoadOnStartup(10);
servletRegistrationBean.addUrlMappings("/hystrix.stream");
servletRegistrationBean.setName("HystrixMetricsStreamServlet");
return servletRegistrationBean ;
}
}
- 重复第一个步骤,你会看到有一个ping一直在ping,其实就是在ping我们工程中hystrix默认给我们埋下的监控点,这也是为什么我们要用spring全家桶的原因之一,在其他的框架中像这样的事情,是需要我们自己去设计,开发的。而spring直接帮我们集成进来了,配置、配置就可以用了。效果如下:
我们再次访问http://localhost:8001/hystrix,监控http://localhost:8001/hystrix.stream这个地址,你会发现如图下界面,但是很不幸的告诉你,我们仍然看不到效果,为什么?卖个关子,请接着往下看。
请使用同样的方法将"mrico-service-consumer"工程改造,改造完后,我们访问http://localhost:8002/hystrix,输入http://localhost:8002/hystrix.stream这个地址进行监控,你会发现奇迹,但是一样看不到东西,这时候我们访问一下消费服务的接口http://localhost:8002/consumerHelloWorld?name=rose,然后再返回看一下监控页面,如果页面没有自动刷新,就手动刷一下页面,你就会看到效果了。这里面的英文是什么意思,请自行搜索,效果如下:
2.5 小结
经过上面的步骤,我们大致明白了一些问题:
- 服务的整个监控是由spring cloud帮我们集成的,而且不需要我们写任何代码。
- 对于服务监控,监控的是调用方,而不是服务提供方,我个人认为这也是一种思想,不用过度设计,比如你服务方和消费方都去监控。我相信在spring cloud没有出来之前应该有人这么做,但我尝试这种思想后过后觉得意义并不大。那么刚才我们讲的监控埋点,也是埋在了消费方的接口。对此有兴趣的小伙伴如果想知道更详细的内容,可以去百度一下。
- 为什么我第二个视频SpringCloud实战之初级入门(二)— 服务注册与服务调用会讲到说,在真实环境中像这种一个提供服务,一个提供调用的单向调用基本不存在,今天两个工程都加入了服务监控,大家也都看到了,第一个工程根本看不到任何东西,因为它没有调用其他的服务。
- 为什么先讲服务的监控后讲熔断?因为你只有明白了监控是怎么一过程,你才能更好的了解熔断,因为熔断也是在消费方实现的。
3. 利用hystrix实现消费服务熔断
3.1 加入服务熔断
其实如果你在spring全家桶里面做集成,做这个熔断非常简单,接下来我们写MyFristConsumerHystrix这个类,如下:
@Component
public class MyFristConsumerHystrix implements MyFristConsumer{
@Override
public String helloWorld(String name) {
return "server is closed , your send failed";
}
}
3.2 测试服务熔断
关掉服务提供工程
访问调用接口,你会看如下结果:
查看监控,你就会发现图标变红了。
3.3 小结
- 关于服务熔断,在真实使用中也不是说所有的服务都需要熔断,这个要根据实际情况来。
- 服务熔断的目的是为了避免微服务环境下,应用因为网络抖动或者服务异常的解决方案。如果应用长时间的服务异常,并且服务与服务之间依赖过多,就会引起“级联”效果,造成服务雪崩。
4. 利用turbine监控所有应用
4.1 创建工程
创建一个名称"mirco-service-turbine-hystrix-dashboard"的工程,在pom文件中要有以下依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-turbine</artifactId>
</dependency>
因为我们的服务都已经注册到了eureka上,所以只需要连上eureka,从eureka上找到需要监控的服务就可以了。
4.2 修改配置文件
在application.yml文件中另入以下配置
spring.application.name: turbine-hystrix-dashboard
server.port: 6001
turbine:
appConfig: service-provider,service-consumer
clusterNameExpression: new String("default")
instanceUrlSuffix: hystrix.stream
aggregator:
clusterConfig: default
eureka:
client:
serviceUrl:
defaultZone: http://localhost:9001/eureka/
4.3 修改启动文件
@EnableDiscoveryClient
@EnableTurbine
@EnableHystrixDashboard
@SpringBootApplication
public class MircoServiceTurbineHystrixDashboardApplication {
public static void main(String[] args) {
SpringApplication.run(MircoServiceTurbineHystrixDashboardApplication.class, args);
}
@Bean
public ServletRegistrationBean<TurbineStreamServlet> getServlet() {
TurbineStreamServlet streamServlet = new TurbineStreamServlet();
ServletRegistrationBean<TurbineStreamServlet> registrationBean = new ServletRegistrationBean<TurbineStreamServlet>(streamServlet);
registrationBean.setLoadOnStartup(1);
registrationBean.addUrlMappings("/turbine.stream");
registrationBean.setName("TurbineStreamServlet");
return registrationBean;
}
}
4.4 启动
- 依次启动“mirco-service-config”、“mirco-service-eureka”、"mirco-service-provider"、"mirco-service-consumer"、“mirco-service-turbine-hystrix-dashboard”这五个工程
- 访问http://localhost:8002/consumerHelloWorld?name=rose
- 访问http://localhost:6001/hystrix,监控http://localhost:6001/turbine.stream,就可以看到刚才在"mirco-service-consumer"监控里面看到的内容了,如果你想看到多个服务,那么你写多几个服务,只要被调用过都可以看到,亲测可用。
5.一点点重要的事情
- 教程中源代码地址github-Spring Cloud实战之初级入门(四)— 利用Hystrix实现服务熔断与服务监控
- 教程对应的视频地址爱奇艺-Spring Cloud实战之初级入门(四)— 利用Hystrix实现服务熔断与服务监控
Spring Cloud实战之初级入门(四)— 利用Hystrix实现服务熔断与服务监控的更多相关文章
- Spring Cloud实战之初级入门(六)— 服务网关zuul
目录 1.环境介绍 2.api网关服务 2.1 创建工程 2.3 api网关中使用token机制 2.4 测试 2.5 小结 3.一点点重要的事情 1.环境介绍 好了,不知不觉中我们已经来到了最后一篇 ...
- Spring Cloud实战之初级入门(五)— 配置中心服务化与配置实时刷新
目录 1.环境介绍 2.配置中心服务化 2.1 改造mirco-service-spring-config 2.2 改造mirco-service-provider.mirco-service-con ...
- spring cloud实战与思考(四) JWT之Token主动失效
需求: JWT泄露.密码重置等场景下,需要将未过期但是已经不安全的JWT主动失效. 本文不再复述JWT的基础知识,不了解的小伙伴可以自行Google一下.这里主要是针对以上需求聊一聊解决方案.如果服务 ...
- SpringCloud实战之初级入门(三)— spring cloud config搭建git配置中心
目录 1.环境介绍 2.配置中心 2.1 创建工程 2.2 修改配置文件 2.3 在github中加入配置文件 2.3 修改启动文件 3. 访问配置中心 1.环境介绍 上一篇文章中,我们介绍了如何利用 ...
- 5w 字 | 172 图 | 超级赛亚级 Spring Cloud 实战
一.PassJava 项目简介 PassJava-Learning 项目是 PassJava(佳必过)项目的学习教程.对架构.业务.技术要点进行讲解. PassJava 是一款 Java 面试刷题 的 ...
- Spring Cloud源码分析(四)Zuul:核心过滤器
通过之前发布的<Spring Cloud构建微服务架构(五)服务网关>一文,相信大家对于Spring Cloud Zuul已经有了一个基础的认识.通过前文的介绍,我们对于Zuul的第一印象 ...
- SpringCloud实战之初级入门(二)— 服务注册与服务调用
目录 1.环境介绍 2.服务提供 2.1 创建工程 2.2 修改配置文件 2.3 修改启动文件 2.5 亲测注意事项 3.服务调用 3.1 创建工程 3.2 修改配置文件 3.3 修改启动文件 3.4 ...
- Spring Cloud实战 | 最八篇:Spring Cloud +Spring Security OAuth2+ Axios前后端分离模式下无感刷新实现JWT续期
一. 前言 记得上一篇Spring Cloud的文章关于如何使JWT失效进行了理论结合代码实践的说明,想当然的以为那篇会是基于Spring Cloud统一认证架构系列的最终篇.但关于JWT另外还有一个 ...
- Spring Cloud - Nacos注册中心入门单机模式及集群模式
近几年微服务很火,Spring Cloud提供了为服务领域的一整套解决方案.其中Spring Cloud Alibaba是我们SpringCloud的一个子项目,是提供微服务开发的一站式解决方案. 包 ...
随机推荐
- “全栈2019”Java第六十六章:抽象类与接口详细对比
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- php-fpm 解析
以下内容转自:https://blog.csdn.net/u010785091/article/details/78705690 有一些工具一直在用,却从来也不知道这些东西是什么. 现在想想还是梳理一 ...
- luoguP4513 小白逛公园
https://www.luogu.org/problemnew/show/P4513 题意是给你一个序列,计算一个区间内的最大字段和,支持单点修改 线段树维护左起最大字段和,右起最大字段和,区间和和 ...
- Codeforces 464E. The Classic Problem
题目大意 给定一张$n$个点, $m$条边的无向图,求$S$ 到$T$的最短路,其中边权都是$2^k$的形式$n,m,k<=10^5$,结果对$10^9+7$取模 题解 大佬好厉害 跑一边dij ...
- 使用ceph-deploy进行ceph安装
ceph安装包介绍: 1.ceph-deploy: ceph的部署软件,通过该软件可以简便部署,这个软件并非整个ceph集群系统中必须的 2.ceph: ceph整个服务集群中的每个节点必须的软件.提 ...
- fetch网络请求 get 和 post
//在React Native中,使用fetch实现网络请求 /* fetch 是一个封装程度更高的网络API, 使用了Promise* Promise 是异步编程的一种解决方案* Promise 对 ...
- rest-assured之如何指定请求数据(Specifying Request Data 包括请求参数、请求头、cookie等)
我们除了可以为一个请求指定请求参数之外,还可以指定请求头(header).cookies.请求体(body)以及请求内容类型(content-type)等,下面我们就来一一介绍一下: 一.请求HTTP ...
- springboot(十一)-为什么要用springboot
前言 学习了一段时间springboot,一般都可以在项目中使用springboot开发了.因为springboot的东西并不多,或者说,springboot根本就没有新东西. 好了,现在问一句,我们 ...
- android 捕获未try的异常
1.Thread.UncaughtExceptionHandler java里有很多异常如:空指针异常,越界异常,数值转换异常,除0异常,数据库异常等等.如果自己没有try / catch 那么线程就 ...
- 2019.04.18 读书笔记 深入string
整个.net中,最特殊的就是string类型了,它有着引用类型的特性,又有着值类型的操作方式,最特殊的是,它还有字符串池,一个字符串只会有一个实例(等下就推翻!). 鉴于之前的<==与Equal ...