Docker-Spring Cloud Config客户端,配置服务器发现问题

时间:2019-10-07 11:53:19

标签: spring-cloud-netflix spring-cloud-config

我正在尝试使用Spring Cloud Netflix Stack,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

在各种示例中,发现和configserver的实现最少,并且可以通过以下方式克隆完整的代码:

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

当Spring Cloud配置客户端“ constants-service”在bootstrap.properties中使用以下配置时

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

然后一切似乎都可以正常工作,包括在“ Eureka”中注册以及从configserver中检索配置。

然后通过发现查找configserver,然后从恒定服务中检索配置,我按如下所示修改bootstrap.properties文件:

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

上述更改具有防止“常量服务”连接到eureka的作用,方法是使用Ehosta主机名,localhost代替发现,并且configserver服务的查找和使用Eureka进行的自注册都会失败。

用于发现的application.properties是:

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

configserver的application.properties是:

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(发现)客户端和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 个答案:

答案 0 :(得分:1)

您正在将应用程序切换为“ Discovery First mode”,因此您的常量服务应该了解Eureka并从名称中获取 configserver URL 。

问题很简单: constants-service 的bootstrap.properties不包含指向Eureka的URL,您应该将ureka客户端配置从git repo(application.properties)移至bootstrap.properties。