前言
前面我们介绍了通过turbine直接聚合多个服务的监控信息,实现了服务的监控,但是这种方式有个不太好的地方就是turbine和服务的耦合性太强了,针对这个问题,我们可以将服务的监控消息发送到RabbitMQ中,然后turbine中RabbitMQ中获取获取监控消息,这样就实现类服务和turbine的解耦。
我们通过案例来演示下如何实现该效果
一、启动RabbitMQ服务
显然我们需要安装启动一个RabbitMQ服务
二、创建consumer服务
创建一个consumer服务,同时要将dashboard的监控信息发送到RabbitMQ服务中。
1.创建项目
2.添加依赖
此处的核心依赖如下,完整依赖参考git完整代码
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix</artifactId> <version>1.3.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix-dashboard</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-netflix-hystrix-stream</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-stream-rabbit</artifactId> </dependency>
3.修改配置
添加对RabbitMQ的配置信息
spring.application.name=shop-product-consumer-hystrix-dashboard server.port=9090 #设置服务注册中心地址,指向另一个注册中心 eureka.client.serviceUrl.defaultZone=http://dpb:123456@eureka1:8761/eureka/,http://dpb:123456@eureka2:8761/eureka/ #Feign 默认是不开启 Hystrix 的。默认为:false feign.hystrix.enabled=true spring.rabbitmq.host=192.168.88.150 spring.rabbitmq.port=5672 spring.rabbitmq.username=dpb spring.rabbitmq.password=123 spring.rabbitmq.virtualHost=/
4.修改启动类
启动服务,并访问测试
@EnableFeignClients @EnableDiscoveryClient @SpringBootApplication @EnableHystrix @EnableHystrixDashboard public class SpringcloudFeignProdcutConsumerApplication { public static void main(String[] args) { SpringApplication.run(SpringcloudFeignProdcutConsumerApplication.class, args); } }
访问请求:http://localhost:9090/list
获取监控数据:http://localhost:9090/hystrix.stream
同时注意RabbitMQ的控制台
能够看到是有变化的
三、创建turbine服务
1.创建项目
2.添加依赖
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-turbine-stream</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-stream-rabbit</artifactId> </dependency> </dependencies>
3.修改配置
spring.application.name=shop-product-consumer-turbine server.port=1002 #设置服务注册中心地址,指向另一个注册中心 eureka.client.serviceUrl.defaultZone=http://dpb:123456@eureka1:8761/eureka/,http://dpb:123456@eureka2:8761/eureka/ spring.rabbitmq.host=192.168.88.150 spring.rabbitmq.port=5672 spring.rabbitmq.username=dpb spring.rabbitmq.password=123 spring.rabbitmq.virtualHost=/
4.启动类
注意注解
@SpringBootApplication @EnableTurbineStream public class SpringcloudFeignProdcutConsumerApplication { public static void main(String[] args) { SpringApplication.run(SpringcloudFeignProdcutConsumerApplication.class, args); } }
启动服务,访问:http://localhost:1002/turbine.stream
说明从RabbitMQ中获取到了监控数据
四、创建dashboard可视服务
可视化的服务可以用之前创建的即可
启动服务
看到了consumer的监控数据,案例成功!