Docker - клиент Spring Cloud Config, проблема с обнаружением сервера конфигурации - PullRequest
0 голосов
/ 07 октября 2019

Я экспериментирую со стеком Spring Cloud Netflix и Spring Cloud Config Server и клиентами.

Для этого я установил минимальный пример, как показано в следующем файле docker-compose.

version: '3'
services:

#Eureka Service
  discovery:
    container_name: discovery
    image: jbprek/discovery:latest
    ports:
      - "8761:8761"

#Spring cloud config server
  configservice:
    container_name: configserver
    image: jbprek/configserver:latest
    ports:
      - "8888:8888"
    depends_on:
      - discovery

#Example microservice using discovery and spring cloud config
  constants-service:
    container_name: constants-service
    ports:
      - "8080:8080"
    image: jbprek/constants-service:latest
    depends_on:
      - discovery
      - configservice

Реализация discovery и configserver минимальна после различных примеров, и полный код может быть клонирован следующим образом:

git clone https://prek@bitbucket.org/prek/boot-netflix-problem.git

Когда весенний клиент конфигурации облака "constants-service" использует следующую конфигурацию в начальной загрузке. свойства

spring.application.name=constants-service
spring.cloud.config.uri=http://configserver:8888

тогда, кажется, все работает нормально, включая регистрацию с помощью "Eureka" и извлечение конфигурации из configserver.

Затем поиск по серверу config путем обнаружения, а затем извлечение конфигурации из constant-serviceЯ изменяю файл bootstrap.properties следующим образом:

spring.application.name=constants-service
#Lookup through Eureka
spring.cloud.config.discovery.enabled=true
spring.cloud.config.discovery.service-id=CONFIGSERVER

Приведенное выше изменение предотвращает подключение «constants-service» к eureka, используя имя хоста Eureka, localhost вместо discovery и оба. поиск службы configserver и самостоятельная регистрацияture with Eureka fail.

application.properties для обнаружения:

server.port=8761
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false

application.properties для configserver:

server.port=8888
eureka.client.register-with-eureka=true
eureka.client.fetch-registry=true
eureka.client.service-url.defaultZone=http://discovery:8761/eureka

spring.cloud.config.server.git.uri=https://bitbucket.org/prek/boot-netflix-problem-config-data.git
spring.cloud.config.server.git.clone-on-start=true
spring.cloud.config.server.git.force-pull=true
spring.cloud.config.discovery.enabled=false

А для констант служба есть:

spring.application.name=constants-service

eureka.client.register-with-eureka=true
eureka.client.fetch-registry=true
eureka.client.service-url.defaultZone=http://discovery:8761/eureka

Может кто-нибудь посоветовать указанную выше конфигурацию?

Обновление

В соответствии с ответом, предоставленным ниже @nmyk для службы констант, которая является Eureka (discovery) клиент и клиент Spring Cloud Config, конфигурация для обнаружения и конфигурации должна содержаться в файлах bootstrap.properties, поэтому приведенные выше примеры файла boostrap.properties для службы констант могут быть следующими:

spring.application.name=constants-service

eureka.client.register-with-eureka=true
eureka.client.fetch-registry=true
eureka.client.service-url.defaultZone=http://discovery:8761/eureka

spring.cloud.config.discovery.enabled=true
spring.cloud.config.discovery.service-id=CONFIGSERVER

1 Ответ

1 голос
/ 07 октября 2019

Вы переключаете ваше приложение в режим Discovery First ', поэтому ваш constants-service должен знать о Eureka и получать от него configserver URLпо имени.

Проблема проста: ваш bootstrap.properties constants-service не содержит URL-адрес Eureka, вам следует переместить конфигурацию клиента eureka из git repo (application.properties) в bootstrap.properties.

...