开发者社区> eacdy0000> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

解决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 许可协议。可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
从spring源码层面分析循环依赖解决方案的实现原理(中)
从spring源码层面分析循环依赖解决方案的实现原理(中)
40 0
从spring源码层面分析循环依赖解决方案的实现原理(下)
从spring源码层面分析循环依赖解决方案的实现原理(下)
36 0
Spring Cloud(五)《Turbine 监控信息聚合展示 Hystrix》
Hystrix Dashboard 可以定时收集接口调用信息;时长、次数、性能、熔断等各项指标来进行监控展示,但是我们每次监控都需要输入一个Hystrix 的链接例如:http://localhost:9001/actuator/hystrix.stream,但是这样并不利于我们去做整体服务的监控,并且在实际使用的过程中如果是几十到几百个接口那么这样的监控几乎达不到监控效果,就累死在监控路上了。因此我们需要使用到 Turbine 来进行监控信息聚合,可以按业务组定义配置方便监控。
56 0
Spring Cloud实战小贴士:turbine如何聚合设置了context-path的hystrix数据
Spring Cloud实战小贴士:turbine如何聚合设置了context-path的hystrix数据
53 0
[Flink]Flink1.3 Stream指南五 窗口触发器与驱逐器
1. 窗口触发器 触发器(Trigger)确定窗口(由窗口分配器形成)何时准备好被窗口函数处理。每个窗口分配器都带有默认触发器。
2229 0
springcloud(五):熔断监控Hystrix Dashboard和Turbine
Hystrix-dashboard是一款针对Hystrix进行实时监控的工具,通过Hystrix Dashboard我们可以在直观地看到各Hystrix Command的请求响应时间, 请求成功率等数据。
1302 0
++ fatal error C1083: 无法打开预编译头文件:“.\Debug\router.pch”
一、出现此错误首先检查:stdafx.cpp文件上右键——属性,预编译头选“创建”,其它cpp选“使用”。 二、如果是采用这样的设置,还是有错误,重新生成解决方案,重新调试。 三、实在不行的话,步骤/方法右键点击你创建的项目,选择“属性标签”点击属性,弹出“项目属性页”,在左侧找到以下位置  配置属性 -->  C/C++  --> 预编译头,并选择它:在右边的菜单中选择 “创建/使用预编译头”中的“不使用预编译头文件”点击“确定”按钮退出即可原因分析。
749 0
关于ext.grids常见问题(Frequently asked questions about grids):
Grid is empty Grid Doesn’t show images correctly Sorting issues Grids inside Tab Panels Links inside grid cells Combining Fields into ...
846 0
+关注
eacdy0000
I do things.
87
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载