Turbine使用RabbitMq收集数据

问题描述

我在学习《Spring Cloud与Docker微服务架构实战》一书中有一个章节是在教Turbine来聚合hystrix的监控数据,
然后又一个小节是说让Turbine通过RabbitMq来收集数据,但是我按照书中的提示进行操作之后并不能获取到数据。
一直显示如下数据:

clipboard.png

这种情况应该就是虽然端点可以访问,但是并没有数据。

我分析了一下问题,消息的传递分为两个方面,一个是生产者将Hystrix的监控消息发送到RabbitMq中,一个是Turbine从RabbitMq中读取消息。通过访问RabbitMq的网页:

clipboard.png

如上图,确定了一直有消息在产生,这就说明,生产者将Hystrix的监控消息发送到RabbitMq是没有问题的,而且直接查看相应端点也能查看到数据:

clipboard.png

现在我基本确定是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的数据?
请诸位大神解惑,万分感谢

阅读 2.8k
2 个回答

首先添加依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-netflix-hystrix-stream</artifactId>
</dependency>

然后登陆mq查看链接是否正常

clipboard.png

是否有exchange
clipboard.png

是否有自动创建的队列

clipboard.png

你会发现在turbine端是没有输出的,只有hystrix端有输入。

接下来设置hystrixStreamOutput,将其绑定到turbineStreamInput

clipboard.png

再次查看turbineStreamInput是这样子的

clipboard.png

数据从hystrixStreamOutput经过turbineStreamInput达到队列。

我在完成上面的步骤后就可以获取到数据了,我感觉这可能不是最好的解决方案,有点麻烦,需要手动设置。
自己摸索的,可能不适用你的代码。

新手上路,请多包涵

换版本,spring boot 2.0.4和Spring Cloud F版没问题

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题