SpringCloud - 断路器监控Hystrix Dashboard使用详解3(与消息代理RabbitMQ结合)
作者:hangge | 2020-07-24 08:00
三、与消息代理结合
1,架构图
(1)Spring Cloud 在封装 Turbine 的同时也封装了基于消息代理的收集实现。所以我们可以将所有需要收集的监控消息都输出到消息代理中,然后 Turbine 服务再从消息代理中异步获取这些监控信息,最后将这些监控信息聚合并输出到 Hystrix Dashboard 中。
(2)通过引入消息代理,我们的 Turbine 和 Hystrix Dashboard 实现的监控架构可以改成如下的结构:
2,安装 RabbitMQ
跟前文相比,这里多了一个重要元素 RabbitMQ,其具体安装步骤可以参考我之前写的这篇文章:
3,服务消费者 ribbon-consumer 配置
(1)我们需要对服务消费者 ribbon-consumer 做一些修改,使其监控信息能够输出到 RabbitMQ 上。首先在 pom.xml 文件中增加如下依赖配置:
<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>
(2)接下来在 application.properties 中添加 RebbitMQ 的连接信息:
spring.rabbitmq.host=192.168.60.133 spring.rabbitmq.port=5672 spring.rabbitmq.username=hangge spring.rabbitmq.password=123
4,搭建 Turbine 项目
(1)本次搭建的 Turbine 项目跟前文不大一样,是基于消息代理的 Trubine 聚合服务。首先创建一个标准的 Spring Boot 工程,在 pom.xml 文件中添加如下依赖内容:
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-turbine-stream</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-stream-rabbit</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Hoxton.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
(2)接着在主类上添加 @EnableDiscoveryClient(激活 Eureka 中的 DiscoveryClient 实现)和 @EnableTurbineStream 注解(开启 Turbine Stream):
@SpringBootApplication @EnableDiscoveryClient @EnableTurbineStream public class TurbineApplication { public static void main(String[] args) { SpringApplication.run(TurbineApplication.class, args); } }
(3)最后编辑项目的 application.properites 文件,加入 Eureka、RebbitMQ 的相关配置:
#为服务命名
spring.application.name=turbine
#设置服务端口
server.port=8989
#指定服务注册中心的地址
eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/
#RabbitMQ相关配置
spring.rabbitmq.host=192.168.60.133
spring.rabbitmq.port=5672
spring.rabbitmq.username=hangge
spring.rabbitmq.password=123
5,在 RabbitMQ 中添加绑定
(1)我们分别启动 eureka-server、HELLO-SERVICE、RIBBON-CONSUMER、Turbine 以及 Hystrix Dashboard,并在确保 RabbitMQ 已在正常运行。
(2)访问 Hystrix Dashboard,并开启对 http://localhost:8989 的监控(后面不需要 turbine.stream),可以发现一直显示“Loading...”(即使访问几下 ribbon-consume 服务之前定义的接口 http://192.168.60.1:9000/hello-consumer 来调用下服务也是一样)
(3)访问 RabbitMQ 管理页面的 Exchanges 选项卡,会看到已经生成了两个新的 Exchange,hystrixStreamOutput(Hystrix 发送数据流交换器),turbineStreamInput(Turbine 接收数据交换器)
(4)再打开 Queues 选项卡,会发现已经生成了一个新的 Queue,turbineStreamInput(Turbine 消息队列)。
(5)打开 Exchanges 选项卡的 hystrixStreamOutput 详情页之后可以看到,当我们发起请求时,只有 Publish(In) 没有 Publish(Out),即消息在正确的产生却并没有被消费掉。Hystrix Monitor 页面自然不会获取到数据。
(6)将页面往下拉,点开 Bindings 按钮,可以看到下面列表是 no bindings,说明消息生产者和消息消费者没有被正确的绑定。
(7)手动添加绑定关系,按如下所示填写绑定信息然后点击Bind按钮绑定:
- 第一行:下拉框选 To exchange,内容填 turbineStreamInput
- 第二行:Routing key 填 #
(9)访问 Hystrix Dashboard,在输入框输入 http://localhost:8989 并点击 Monitor Stream 按钮,跳转到 Hystrix Monitor 页面之后会发现聚合数据也已经正确显示了:
全部评论(0)