1.环境介绍

本篇文章涉及到前面文章的工程,mirco-service-providermirco-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中加入我们想要的配置,也是一样的生效,如果不明白我这里写了什么,可以看我的视频。我们这里介绍第一种方法:

  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”这目录加入工程的访问目录。

  • 修改启动文件如下:

@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 小结

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

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

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 测试服务熔断

  1. 关掉服务提供工程

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

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

3.3 小结

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

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 启动

  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. Logstash使用grok解析IIS日志

    Logstash使用grok解析IIS日志 1. 安装配置 安装Logstash前请确认Elasticsearch已经安装正确,参见RedHat6.4安装Elasticsearch5.2.0. 下载链 ...

  2. css样式引入方式,及常用设置标签样式

    一. 三种样式引入方式   1. 内联式-直接写在div标签中,不推荐用 <div style="color:red;font-size:20px;font-family:'Micro ...

  3. Mac环境下安装python库时出现ModuleNotFoundError: No module named 'XXX'

    在使用pip3安装爬虫的一些有关库时发现安装成功后,import时发现又找不到,后来发现一个解决方法. 在Anaconda-Navigator里面打开environment里面寻找发现真的没有,这时再 ...

  4. 面试笔试(C++部分)

    1.define 和const,inline的区别 define的缺点: 1.边界效应(必须加括号,才能避免边界效应) #define MUL(A,B) A*B 而在使用的时候,这样的调用: ,b=, ...

  5. 动手玩转Docker(一)

    在学习docker之前,先了解一下什么是docker,以及docker技术存在的意义. Docker是PaaS供应商dotCloud开源的一个基于LXC 的高级容器引擎,源代码托管在 GitHub 上 ...

  6. using声明和using指示

    using声明(using declaration) using namespacename::namespacemember; using声明一次只引入命名空间的一个成员.从效果上看就好像using ...

  7. B: Break Prime

    题目描述 给定一个素数,试判断能否将该素数写为b3−a3 的形式,a,b皆为非负整数. 输入 多组输入 每行一个素数P (2≤P≤1015)   输出 若可以分解输出a,b(a<b) ,不能输出 ...

  8. django Form数据读取问题

    1.在我学习django的过程中,我学习到了一个关于表单验证的问题 2.我们从前端post一个表单,通过urls配置,传给对应的view方法 3.然后再传给Form验证 4.一开始我是很好奇,在vie ...

  9. localStorage、sessionStorage用法总结

    1.作用 1.1 共同点:       都是用来存储客户端临时信息的对象.       均只能存储字符串类型的对象(虽然规范中可以存储其他原生类型的对象,但是目前为止没有浏览器对其进行实现). 1.2 ...

  10. 性能测试工具Jmeter13-Jmeter跨线程组调用token

    1.正则表达式或者json提取器(我是用json提取器提取的),提取token 2.添加后置处理器BeanShell PostProcessor,然后输入以下函数 3.添加HTTP信息头管理器,写入函 ...