解决Turbine Stream无法注册到Eureka Server上的问题

简介: 在我们的项目中,各服务整合spring-cloud-netflix-hystrix-stream ,当开启断路器的API被调用时,就会产生监控数据,这些监控数据会以MQ消息传递到RabbitMQ/Kafka中,Turbine整合spring-cloud-starter-turbine-stream ,消费MQ消息,并聚合各个服务的监控数据。

在我们的项目中,各服务整合spring-cloud-netflix-hystrix-stream ,当开启断路器的API被调用时,就会产生监控数据,这些监控数据会以MQ消息传递到RabbitMQ/Kafka中,Turbine整合spring-cloud-starter-turbine-stream ,消费MQ消息,并聚合各个服务的监控数据。架构如图所示:

turbine-kafka.png

代码非常简单,你懂的,就不贴了。至此,各服务可以正常产生Hystrix监控数据;Turbine也可以正常聚合各服务的监控数据;业务一切正常。

然而,当笔者尝试将Turbine Server也注册到Eureka Server时,无法成功。 Turbine Server的配置如下:

server:
  port: 8989
spring:
  application:
    index: ${random.long}
  cloud:
    stream:
      kafka:
        binder:
          zk-nodes: localhost:2181
          brokers: localhost:9092
eureka:
  client:
    serviceUrl:
      defaultZone: http://127.0.0.1:8761/eureka/
  instance:
    prefer-ip-address: true

于是开启了辛酸的排查历程:

  • 排查配置:无误
  • 排查代码:尼玛没几行代码,不缺注解
  • 排查网络问题:无误

那么究竟是什么问题呢。笔者在万能的GitHub上找到了答案。问题出在spring-cloud-turbine-stream ,该依赖会启动一个Netty容器,并将server.port 设为-1 ,从而关闭Servlet容器。这其实是官方的一个小Bug,不过官方说等Spring Boot 2.0才会修复,详见:https://github.com/spring-cloud/spring-cloud-netflix/issues/1774

好在,问题可以规避,规避的方式也很简单,将配置改为如下即可:

server:
  # 容器端口
  port: 8989
management:
  # 配置Spring Boot Actuator的端口
  port: 8990
spring:
  application:
    index: ${random.long}
  cloud:
    stream:
      kafka:
        binder:
          zk-nodes: localhost:2181
          brokers: localhost:9092
eureka:
  client:
    serviceUrl:
      defaultZone: http://127.0.0.1:8761/eureka/
  instance:
    prefer-ip-address: true
    # 务必跟server.port的配置保持一致
    non-secure-port: 8989

总结一下:

  • 在指定server.port 的基础上,指定management.port ,两个端口务必不同;
  • 添加配置:eureka.instance.non-secure-port ,以便于服务注册到Eureka Server上,该端口需要跟server.port 所配置的端口一致。

这样,Turbine Server就可以注册到Eureka Server了。注册到Eureka Server后显示如下:

turbine-in-eureka.png

如图,现在已可正常将Turbine注册到Eureka Server了,但依然存在问题:那就是192.168.191.2:turbine-server:-1 这个里面的-1 应该是服务的端口server.port 此处展示并不正确,对于强迫症,如果想要自定义这部分内容,该如何处理呢?请阅读我的博客:http://www.itmuch.com/spring-cloud-sum/eureka-Instance-id/

说明

如果大家使用的不是Turbine Stream(即:不使用消息中间件收集监控信息),那么不存在该问题。

本文链接: http://www.itmuch.com/spring-cloud-sum/turbine-stream-cannot-register-into-eureka-server/
**版权声明: **本博客由周立创作,采用 CC BY 3.0 CN 许可协议。可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。

目录
相关文章
|
6月前
|
负载均衡 Java 对象存储
02SpringCloud服务的注册与发现(Eureka Server)
02SpringCloud服务的注册与发现(Eureka Server)
22 0
|
9月前
|
Java
SpringCloud源码剖析-Eureka Server的自动配置
这里和EureakClientAutoConfiguration差不多,都是由主启动类上的@SpringBootApplication标签中的@EnableAutoConfiguration启动自动配置,通过AutoConfigurationImportSelector来扫描classpath下的starter包中的自动配置类
32 0
|
9月前
|
Java API
七.SpringCloud源码剖析-Eureka Server的自动配置
前面的章节我们针对于Eureak Client的初始化 ,服务注册 ,服务发现,服务续约,取消注册功能进行了分析,接下来我们围绕Eureka的核心功能对Server端进行分析,本章将会分析Eureka Server的启动过程。
七.SpringCloud源码剖析-Eureka Server的自动配置
|
9月前
|
存储 缓存 API
九.SpringCloud源码剖析-Eureka Server服务注册流程
本片文章的目的是分析Eureka Server的注册流程,您可以结合《[Eureka Client服务注册](https://blog.csdn.net/u014494148/article/details/106907911)》更容易理解
九.SpringCloud源码剖析-Eureka Server服务注册流程
|
9月前
|
存储 缓存 调度
SpringCloud源码剖析-Eureka Server服务注册流程
ApplicationResource.addInstance看方法名就能推测出他是用来注册实例的方法,其中参数InstanceInfo 是客户端提交的注册信息,请求头中isReplicationd为true代表是从其他Eureka Server节点复制实例,如果是isReplication为false,代表是Eureka Client 注册的 在做了一些列参数判断之后,这里在调用PeerAwareInstanceRegistry的register注册服务,使用的是实现类:InstanceRegistry,这个类在之前有介绍过,就是Eureak Server用来实现服务注册,服务发现,服务续
64 0
SpringCloud源码剖析-Eureka Server服务注册流程
|
9月前
|
存储 缓存 算法
八.SpringCloud源码剖析-Eureka Server初始化流程
上一章我们分析了一下EureakServer的自动配置,这章节我们来详细分析一下Eureak Server中的核心组件以及初始化流程
八.SpringCloud源码剖析-Eureka Server初始化流程
|
11月前
|
Java Maven 微服务
Spring Cloud【Finchley】-03将微服务注册到Eureka Server上 + 为Eureka Server添加用户认证
Spring Cloud【Finchley】-03将微服务注册到Eureka Server上 + 为Eureka Server添加用户认证
98 0
Spring Cloud【Finchley】-03将微服务注册到Eureka Server上 + 为Eureka Server添加用户认证
eureka.client常用配置
eureka.client常用配置
46 0
eureka.client常用配置
|
Java 关系型数据库 MySQL
安装 Nacos Server | 学习笔记
快速学习安装 Nacos Server。
282 0
|
开发框架 负载均衡 Java
SpringCloud-1-Netflix-1-Eureka Server
使用Spring Cloud的开源子项目Spring Cloud Netflix来管理服务的注册和发现。
140 0
SpringCloud-1-Netflix-1-Eureka Server

热门文章

最新文章