1.环境介绍

本篇文章涉及到前面文章的工程,mirco-service-providermirco-service-consumer以及需要另外新建一个工程mirco-service-turbine-hystrix-dashbord

2.服务监控

2.1 加入依赖

为“mirco-service-provider”工程的pom文件中加入

  1. <dependency>
  2. <groupId>org.springframework.cloud</groupId>
  3. <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
  4. </dependency>
  5. <dependency>
  6. <groupId>org.springframework.cloud</groupId>
  7. <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
  8. </dependency>

2.2 修改配置文件

这里有点东西需要跟小伙伴们说明,因为上一篇文章SpringCloud实战之初级入门(三)— spring cloud config搭建git配置中心中,我们将服务提供的工程配置文件上传到了github上,那么我们需要修改github上provider.yml,这是第一种方法。第二种方法是直接在bootstrap.yml中加入我们想要的配置,也是一样的生效,如果不明白我这里写了什么,可以看我的视频。我们这里介绍第一种方法:

  1. 在工程目录打开命令行

  2. 使用vi provider.yml编辑配置文件

  3. 保存配置文件

  4. 使用"git status"查看我们工程中哪些文件进行了修改

  5. 使用"git add provider-test.yml"加入本地仓库的提交列表

  6. 使用"git commit -m '提交说明'"将要提交的文件提交到本地仓库

  7. 使用"git push origin master"已经提交到本地仓库的文件上传至远程仓库。

2.3 修改启动文件

  1. 在启动文件中加上"@EnableHystrixDashboard 、@EnableCircuitBreaker"注解,然后启动工程。

  2. 打开浏览器访问http://localhost:7001/hystrix,可以看到如下图内容,说明服务调用的监控就搭建完成了。

2.4 监控服务

我在网络上看了一下,很多教程让你在输入框中输入http://localhost:8001/hystrix.stream然后点击下面的"monitor stream" 按钮基本上就完了,但是在我的环境里面是不行的,可能是spring cloud和spring boot的版本不一样。下面用步骤讲一下怎么做监控:

  • 在浏览器的地址栏中输入http://localhost:8001/hystrix.stream是无法访问的,因为我们没有将“/hystrix.stream”这目录加入工程的访问目录。

  • 修改启动文件如下:

  1. @EnableHystrixDashboard
  2. @EnableCircuitBreaker
  3. @EnableDiscoveryClient
  4. @SpringBootApplication
  5. public class MircoServiceProviderApplication {
  6. public static void main(String[] args) {
  7. SpringApplication.run(MircoServiceProviderApplication.class, args);
  8. }
  9. @Bean
  10. public ServletRegistrationBean<HystrixMetricsStreamServlet> getServlet() {
  11. HystrixMetricsStreamServlet hystrixMetricsStreamServlet = new HystrixMetricsStreamServlet() ;
  12. ServletRegistrationBean<HystrixMetricsStreamServlet> servletRegistrationBean = new ServletRegistrationBean<HystrixMetricsStreamServlet>() ;
  13. servletRegistrationBean.setServlet(hystrixMetricsStreamServlet);
  14. servletRegistrationBean.setLoadOnStartup(10);
  15. servletRegistrationBean.addUrlMappings("/hystrix.stream");
  16. servletRegistrationBean.setName("HystrixMetricsStreamServlet");
  17. return servletRegistrationBean ;
  18. }
  19. }
  • 重复第一个步骤,你会看到有一个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 小结

经过上面的步骤,我们大致明白了一些问题:

  1. 服务的整个监控是由spring cloud帮我们集成的,而且不需要我们写任何代码。
  2. 对于服务监控,监控的是调用方,而不是服务提供方,我个人认为这也是一种思想,不用过度设计,比如你服务方和消费方都去监控。我相信在spring cloud没有出来之前应该有人这么做,但我尝试这种思想后过后觉得意义并不大。那么刚才我们讲的监控埋点,也是埋在了消费方的接口。对此有兴趣的小伙伴如果想知道更详细的内容,可以去百度一下。
  3. 为什么我第二个视频SpringCloud实战之初级入门(二)— 服务注册与服务调用会讲到说,在真实环境中像这种一个提供服务,一个提供调用的单向调用基本不存在,今天两个工程都加入了服务监控,大家也都看到了,第一个工程根本看不到任何东西,因为它没有调用其他的服务。
  4. 为什么先讲服务的监控后讲熔断?因为你只有明白了监控是怎么一过程,你才能更好的了解熔断,因为熔断也是在消费方实现的。

3. 利用hystrix实现消费服务熔断

3.1 加入服务熔断

其实如果你在spring全家桶里面做集成,做这个熔断非常简单,接下来我们写MyFristConsumerHystrix这个类,如下:

  1. @Component
  2. public class MyFristConsumerHystrix implements MyFristConsumer{
  3. @Override
  4. public String helloWorld(String name) {
  5. return "server is closed , your send failed";
  6. }
  7. }

3.2 测试服务熔断

  1. 关掉服务提供工程

  2. 访问调用接口,你会看如下结果:

  3. 查看监控,你就会发现图标变红了。

3.3 小结

  1. 关于服务熔断,在真实使用中也不是说所有的服务都需要熔断,这个要根据实际情况来。
  2. 服务熔断的目的是为了避免微服务环境下,应用因为网络抖动或者服务异常的解决方案。如果应用长时间的服务异常,并且服务与服务之间依赖过多,就会引起“级联”效果,造成服务雪崩。

4. 利用turbine监控所有应用

4.1 创建工程

创建一个名称"mirco-service-turbine-hystrix-dashboard"的工程,在pom文件中要有以下依赖:

  1. <dependency>
  2. <groupId>org.springframework.cloud</groupId>
  3. <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
  4. </dependency>
  5. <dependency>
  6. <groupId>org.springframework.cloud</groupId>
  7. <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
  8. </dependency>
  9. <dependency>
  10. <groupId>org.springframework.cloud</groupId>
  11. <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
  12. </dependency>
  13. <dependency>
  14. <groupId>org.springframework.cloud</groupId>
  15. <artifactId>spring-cloud-starter-netflix-turbine</artifactId>
  16. </dependency>

因为我们的服务都已经注册到了eureka上,所以只需要连上eureka,从eureka上找到需要监控的服务就可以了。

4.2 修改配置文件

在application.yml文件中另入以下配置

  1. spring.application.name: turbine-hystrix-dashboard
  2. server.port: 6001
  3. turbine:
  4. appConfig: service-provider,service-consumer
  5. clusterNameExpression: new String("default")
  6. instanceUrlSuffix: hystrix.stream
  7. aggregator:
  8. clusterConfig: default
  9. eureka:
  10. client:
  11. serviceUrl:
  12. defaultZone: http://localhost:9001/eureka/

4.3 修改启动文件

  1. @EnableDiscoveryClient
  2. @EnableTurbine
  3. @EnableHystrixDashboard
  4. @SpringBootApplication
  5. public class MircoServiceTurbineHystrixDashboardApplication {
  6. public static void main(String[] args) {
  7. SpringApplication.run(MircoServiceTurbineHystrixDashboardApplication.class, args);
  8. }
  9. @Bean
  10. public ServletRegistrationBean<TurbineStreamServlet> getServlet() {
  11. TurbineStreamServlet streamServlet = new TurbineStreamServlet();
  12. ServletRegistrationBean<TurbineStreamServlet> registrationBean = new ServletRegistrationBean<TurbineStreamServlet>(streamServlet);
  13. registrationBean.setLoadOnStartup(1);
  14. registrationBean.addUrlMappings("/turbine.stream");
  15. registrationBean.setName("TurbineStreamServlet");
  16. return registrationBean;
  17. }
  18. }

4.4 启动

  1. 依次启动“mirco-service-config”、“mirco-service-eureka”、"mirco-service-provider"、"mirco-service-consumer"、“mirco-service-turbine-hystrix-dashboard”这五个工程
  2. 访问http://localhost:8002/consumerHelloWorld?name=rose
  3. 访问http://localhost:6001/hystrix,监控http://localhost:6001/turbine.stream,就可以看到刚才在"mirco-service-consumer"监控里面看到的内容了,如果你想看到多个服务,那么你写多几个服务,只要被调用过都可以看到,亲测可用。

5.一点点重要的事情

Spring Cloud实战之初级入门(四)— 利用Hystrix实现服务熔断与服务监控的更多相关文章

  1. Spring Cloud实战之初级入门(六)— 服务网关zuul

    目录 1.环境介绍 2.api网关服务 2.1 创建工程 2.3 api网关中使用token机制 2.4 测试 2.5 小结 3.一点点重要的事情 1.环境介绍 好了,不知不觉中我们已经来到了最后一篇 ...

  2. Spring Cloud实战之初级入门(五)— 配置中心服务化与配置实时刷新

    目录 1.环境介绍 2.配置中心服务化 2.1 改造mirco-service-spring-config 2.2 改造mirco-service-provider.mirco-service-con ...

  3. spring cloud实战与思考(四) JWT之Token主动失效

    需求: JWT泄露.密码重置等场景下,需要将未过期但是已经不安全的JWT主动失效. 本文不再复述JWT的基础知识,不了解的小伙伴可以自行Google一下.这里主要是针对以上需求聊一聊解决方案.如果服务 ...

  4. SpringCloud实战之初级入门(三)— spring cloud config搭建git配置中心

    目录 1.环境介绍 2.配置中心 2.1 创建工程 2.2 修改配置文件 2.3 在github中加入配置文件 2.3 修改启动文件 3. 访问配置中心 1.环境介绍 上一篇文章中,我们介绍了如何利用 ...

  5. 5w 字 | 172 图 | 超级赛亚级 Spring Cloud 实战

    一.PassJava 项目简介 PassJava-Learning 项目是 PassJava(佳必过)项目的学习教程.对架构.业务.技术要点进行讲解. PassJava 是一款 Java 面试刷题 的 ...

  6. Spring Cloud源码分析(四)Zuul:核心过滤器

    通过之前发布的<Spring Cloud构建微服务架构(五)服务网关>一文,相信大家对于Spring Cloud Zuul已经有了一个基础的认识.通过前文的介绍,我们对于Zuul的第一印象 ...

  7. SpringCloud实战之初级入门(二)— 服务注册与服务调用

    目录 1.环境介绍 2.服务提供 2.1 创建工程 2.2 修改配置文件 2.3 修改启动文件 2.5 亲测注意事项 3.服务调用 3.1 创建工程 3.2 修改配置文件 3.3 修改启动文件 3.4 ...

  8. Spring Cloud实战 | 最八篇:Spring Cloud +Spring Security OAuth2+ Axios前后端分离模式下无感刷新实现JWT续期

    一. 前言 记得上一篇Spring Cloud的文章关于如何使JWT失效进行了理论结合代码实践的说明,想当然的以为那篇会是基于Spring Cloud统一认证架构系列的最终篇.但关于JWT另外还有一个 ...

  9. Spring Cloud - Nacos注册中心入门单机模式及集群模式

    近几年微服务很火,Spring Cloud提供了为服务领域的一整套解决方案.其中Spring Cloud Alibaba是我们SpringCloud的一个子项目,是提供微服务开发的一站式解决方案. 包 ...

随机推荐

  1. “全栈2019”Java第六十六章:抽象类与接口详细对比

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  2. php-fpm 解析

    以下内容转自:https://blog.csdn.net/u010785091/article/details/78705690 有一些工具一直在用,却从来也不知道这些东西是什么. 现在想想还是梳理一 ...

  3. luoguP4513 小白逛公园

    https://www.luogu.org/problemnew/show/P4513 题意是给你一个序列,计算一个区间内的最大字段和,支持单点修改 线段树维护左起最大字段和,右起最大字段和,区间和和 ...

  4. Codeforces 464E. The Classic Problem

    题目大意 给定一张$n$个点, $m$条边的无向图,求$S$ 到$T$的最短路,其中边权都是$2^k$的形式$n,m,k<=10^5$,结果对$10^9+7$取模 题解 大佬好厉害 跑一边dij ...

  5. 使用ceph-deploy进行ceph安装

    ceph安装包介绍: 1.ceph-deploy: ceph的部署软件,通过该软件可以简便部署,这个软件并非整个ceph集群系统中必须的 2.ceph: ceph整个服务集群中的每个节点必须的软件.提 ...

  6. fetch网络请求 get 和 post

    //在React Native中,使用fetch实现网络请求 /* fetch 是一个封装程度更高的网络API, 使用了Promise* Promise 是异步编程的一种解决方案* Promise 对 ...

  7. rest-assured之如何指定请求数据(Specifying Request Data 包括请求参数、请求头、cookie等)

    我们除了可以为一个请求指定请求参数之外,还可以指定请求头(header).cookies.请求体(body)以及请求内容类型(content-type)等,下面我们就来一一介绍一下: 一.请求HTTP ...

  8. springboot(十一)-为什么要用springboot

    前言 学习了一段时间springboot,一般都可以在项目中使用springboot开发了.因为springboot的东西并不多,或者说,springboot根本就没有新东西. 好了,现在问一句,我们 ...

  9. android 捕获未try的异常

    1.Thread.UncaughtExceptionHandler java里有很多异常如:空指针异常,越界异常,数值转换异常,除0异常,数据库异常等等.如果自己没有try / catch 那么线程就 ...

  10. 2019.04.18 读书笔记 深入string

    整个.net中,最特殊的就是string类型了,它有着引用类型的特性,又有着值类型的操作方式,最特殊的是,它还有字符串池,一个字符串只会有一个实例(等下就推翻!). 鉴于之前的<==与Equal ...