问题描述
我在学习《Spring Cloud与Docker微服务架构实战》一书中有一个章节是在教Turbine来聚合hystrix的监控数据,
然后又一个小节是说让Turbine通过RabbitMq来收集数据,但是我按照书中的提示进行操作之后并不能获取到数据。
一直显示如下数据:
这种情况应该就是虽然端点可以访问,但是并没有数据。
我分析了一下问题,消息的传递分为两个方面,一个是生产者将Hystrix的监控消息发送到RabbitMq中,一个是Turbine从RabbitMq中读取消息。通过访问RabbitMq的网页:
如上图,确定了一直有消息在产生,这就说明,生产者将Hystrix的监控消息发送到RabbitMq是没有问题的,而且直接查看相应端点也能查看到数据:
现在我基本确定是Turbine读取RabbitMq数据失败,但是我尝试过很多次,总是一直显示 data:{"type":"ping"}
不知道Turbine应该怎么配置才能接收到数据。
Turbine所在微服务的代码、配置等信息很见到,下面贴上:
@EnableTurbineStream
@SpringBootApplication
public class ReadApplication {
public static void main(String[] args) {
SpringApplication.run(ReadApplication.class, args);
}
}
server.port=8031
spring.application.name=turbine
# 注册到服务中心
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
eureka.instance.prefer-ip-address=true
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>read</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>read</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.SR1</spring-cloud.version>
</properties>
<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-netflix-turbine-stream</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-stream-rabbit</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
网上找了半天,没有解决,现在不知道怎么样才能让Turbine正确的读取到RabbitMq的数据?
请诸位大神解惑,万分感谢
首先添加依赖
然后登陆mq查看链接是否正常
是否有exchange

是否有自动创建的队列
你会发现在turbine端是没有输出的,只有hystrix端有输入。
接下来设置hystrixStreamOutput,将其绑定到turbineStreamInput
再次查看turbineStreamInput是这样子的
数据从hystrixStreamOutput经过turbineStreamInput达到队列。
我在完成上面的步骤后就可以获取到数据了,我感觉这可能不是最好的解决方案,有点麻烦,需要手动设置。
自己摸索的,可能不适用你的代码。