Проблема с неизвестными портами при регистрации клиента Spring Eureka - PullRequest
0 голосов
/ 26 февраля 2020

Ну, пробовали ВСЕ учебники, ВСЕ ответили на Stackoverflow. Но я все еще сталкиваюсь с той же ошибкой:

На Heroku клиенты Eureka получают случайные порты, которые я не знаю, откуда они берутся.

И эти случайные порты отличаются от переменной среды Heroku $ PORT. Я знаю, что $ PORT - это порт Dyno контейнера, а не хост-порт xxxxx.herokuapp.com, к которому может получить доступ внешний мир. Опять же, я не знаю, откуда берутся эти порты !!!

Клиенты ссылок в Eureka Dashboard остаются такими:

hdfb2324-8jfw-83ud-dkdf-9ej90jefj201.qwer. dyno.rt.heroku.com:inight-ws-gateway:$ndomRANDOM PORT}

Когда я нажимаю, go до https://inight-ws-gateway.herokuapp.com: $ {RANDOM PORT} / привод /Информация. Я беру Тайм-аут, потому что правильный порт 443, по умолчанию Https.

У меня есть 3 приложения, 1 сервер Eureka и 2 клиента Eureka (Zuul Gateway и тривиальный API отдыха).

Каждый работает хорошо, когда я запускаю на своем локальном хосте, но когда я внедряю в Heroku, это происходит.

Eureka Server application.yaml:

server:
  port: ${PORT} 

spring:
  application:
    name: '@project.artifactId@' # inight-ws-discovery
    version: '@project.version@'

eureka:
  client:
    fetch-registry: false
    register-with-eureka: false

management:
  endpoints:
    enabled-by-default: false
    web:
      exposure:
        include:
        - health
        - info
  endpoint:
    health:
      enabled: true
    info:
      enabled: true

Eureka Client (Zuul gateway) application.yaml:

server:
  port: ${PORT}

spring:
  application:
    name: '@project.artifactId@' # inight-ws-gateway
    version: '@project.version@'

eureka:
  instance:
    hostname: ${INIGHT_EUREKA_INSTANCE_HOSTNAME} # inight-ws-gateway.herokuapp.com
  client:
    enabled: true
    fetch-registry: true
    register-with-eureka: true
    service-url:
      defaultZone: ${INIGHT_EUREKA_CLIENT_SERVICE_URL_DEFAULTZONE} # https://inight-ws-discovery.herokuapp.com/eureka/
    healthcheck:
      enabled: true

zuul:
  sensitive-headers:
  - Cookie

management:
  endpoints:
    enabled-by-default: false
    web:
      exposure:
        include:
        - health
        - info
        - routes
  endpoint:
    health:
      enabled: true
    info:
      enabled: true
    routes:
      enabled: true

jwt:
  config:
    privateKey: ${INIGHT_JWT_CONFIG_PRIVATEKEY}

Eureka Client (Rest API) application.yaml:

server:
  port: ${PORT}

spring:
  application:
    name: '@project.artifactId@' # inight-ws-auth
    version: '@project.version@'
  datasource:
    hikari:
      schema: inight
      jdbc-url: ${INIGHT_DATASOURCE_JDBC_URL}
      username: ${INIGHT_DATASOURCE_USERNAME}
      password: ${INIGHT_DATASOURCE_PASSWORD}
      driver-class-name: ${INIGHT_DATASOURCE_DRIVER_CLASS_NAME}
  jpa:
    show-sql: ${INIGHT_JPA_SHOW_SQL}
    hibernate:
      ddl-auto: ${INIGHT_JPA_HIBERNATE_DDL_AUTO}

eureka:
  instance:
    hostname: ${INIGHT_EUREKA_INSTANCE_HOSTNAME} inight-ws-auth.herokuapp.com
  client:
    enabled: true
    service-url:
      defaultZone: ${INIGHT_EUREKA_CLIENT_SERVICE_URL_DEFAULTZONE} https://inight-ws-discovery.herokuapp.com/eureka/
    healthcheck:
      enabled: true

management:
  endpoints:
    enabled-by-default: false
    web:
      exposure:
        include:
        - health
        - info
  endpoint:
    health:
      enabled: true
    info:
      enabled: true

jwt:
  config:
    privateKey: ${INIGHT_JWT_CONFIG_PRIVATEKEY}

swagger.basePackage: br.com.bz.inight.auth.controller

Ответы [ 2 ]

1 голос
/ 01 марта 2020

моя вина !!!!! У меня есть пара микросервисов на Heroku:

  • Eureka Server
  • Zuul Gateway
  • Некоторые сервисы приложений

Ссылка на Eureka Панель инструментов сервера, не имеет значения . Что важно, это https://GATEWAY.herokuapp.com/actuator/routes и <port enabled="true">80</port> на https://EUREKA_SERVER.herokuapp.com / eureka / apps .

Но для этого (<port enabled="true">80</port> на сервисах приложений) ) вы ДОЛЖНЫ, ТОЛЬКО , заявить в application.yaml

eureka:
  instance:
    non-secure-port: 80
    hostname: ${EUREKA_CLIENT_INSTANCE_HOSTNAME} # herokuapp_name.herokuapp.com

Если вы прочитаете документацию, вы увидите, что свойство eureka.instance.non-secure-port имеет значение по умолчанию 80. Я не Не знаю, почему, но если вы не объявите это, <port enabled="true">80</port> не настроены на приложениях микросервисов на Eureka Server.

Проверьте учебник https://blog.heroku.com/managing_your_microservices_on_heroku_with_netflix_s_eureka.

Ну, это моя архитектура application.yaml:

coffee-eureka-server application.yaml

spring:
  application:
    name: '@project.artifactId@'

server:
  port: ${PORT}

eureka:
  instance:
    hostname: ${EUREKA_CLIENT_INSTANCE_HOSTNAME} # herokuapp_name.herokuapp.com
  client:
    fetch-registry: false
    register-with-eureka: false
    service-url:
      defaultZone: ${EUREKA_SERVER_URI}/eureka/ # in this case, same value of eureka.instance.hostname, but with https:// prefix, of course

coffee-zuul- шлюз application.yaml

spring:
  application:
    name: '@project.artifactId@'

server:
  port: ${PORT}

eureka:
  instance:
    hostname: ${EUREKA_CLIENT_INSTANCE_HOSTNAME} # herokuapp_name.herokuapp.com
  client:
    fetch-registry: true
    register-with-eureka: true
    service-url:
      defaultZone: ${EUREKA_SERVER_URI}/eureka/

management:
  endpoints:
    enabled-by-default: true
    web:
      exposure:
        include:
        - routes
        - info
        - health

coffee-simple-ms application.yaml

spring:
  application:
    name: '@project.artifactId@'

server:
  port: ${PORT}

eureka:
  instance:
    non-secure-port: 80 # <<<<<<<<< HERE
    hostname: ${EUREKA_CLIENT_INSTANCE_HOSTNAME} # herokuapp_name.herokuapp.com
  client:
    fetch-registry: true
    register-with-eureka: true
    service-url:
      defaultZone: ${EUREKA_SERVER_URI}/eureka/
0 голосов
/ 26 февраля 2020

Когда я нажимаю, go до https://inight-ws-gateway.herokuapp.com:${RANDOM PORT}/actuator/info. Я беру Тайм-аут, потому что правильный порт 443, Https по умолчанию.

Когда вы размещаете на localhost, ссылка будет: http://localhost:${PORT}/actuator/info

На Heroku эта ссылка: https://inight-ws-gateway.herokuapp.com/actuator/info

Разница:

  • Используется http secure , https
  • Номер порта "пропал"

Имя хоста inight-ws-gateway.herokuapp.com автоматически переводится в ${IP_ADDRESS}:${PORT}.

Вам потребуется настроить исходный код для генерации URL-адреса https.


Ваш веб Приложение будет работать на порту, отличном от обычного порта http / https. Это не должно быть 80, 8080 или 443. Это может быть любой порт. И этот порт указан Heroku через $PORT.

...