天天看點

解決Turbine Stream無法注冊到Eureka Server上的問題

在我們的項目中,各服務整合

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

許可協定。可自由轉載、引用,但需署名作者且注明文章出處。如轉載至微信公衆号,請在文末添加作者公衆号二維碼。