【问题标题】:Spring Cloud Eureka with Config Server带有配置服务器的 Spring Cloud Eureka
【发布时间】:2016-02-15 11:47:21
【问题描述】:

同时运行 Config Server 和 Eureka Server 时推荐的配置是什么? Config Server 应该是 Eureka 的客户端吗?或者 Eureka 是否应该依赖 Config Server 属性进行配置?还是两者都可以?

【问题讨论】:

  • 我只能让它与在配置服务器上集中 Eureka 客户端的配置一起工作——这对我的设置来说似乎更好,因为到达配置服务器的配置是 1 行而不是 6 行用于设置启动 Eureka 并“自动发现”配置服务器。此外,当我尝试自动发现时,我最终收到 Eureka 错误,说“没有定义类型 [com.netflix.appinfo.EurekaInstanceConfig] 的合格 bean:预期的单个匹配 bean,但找到了 2:eurekaInstanceConfig,eurekaInstanceConfigBean”。你最终决定做什么?什么对你有用?
  • 是的,我还没有完成它,但这是我打算做的,让 Eureka 成为 Config Server 的客户端。

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


【解决方案1】:

使用 Eureka 和 Config Server 的默认方式是使用 Config First bootstrap。本质上,你让 eureka 服务器成为配置服务器的客户端,但你没有让配置服务器成为尤里卡的客户端。

正如 David Syer 在 these(和 this)问题上所说,spring cloud 的创始人,你必须使用带有前端负载均衡器的配置服务器,因此单个 URL 已经是高可用的。

我也是 Spring Cloud 的新手,但我同意他的观点,因为 Eureka 是一个服务发现,恕我直言,它应该只在它的问题域上运行。对于向 Config 服务器询问其配置的 Eureka 服务器来说,这将是一个复杂的逻辑。如果 Config Server 也是 Eureka 的 Server 来获取其 defaultZone 列表,我无法想象 Eureka Server 将如何知道要获取哪个配置服务器。

分离 Config Server 的 HA 对我来说会更简单。

【讨论】:

    【解决方案2】:

    基于@Mideel's answer

    Eureka 和 Config Client 配置(需要 Bootstrap):

    # bootstrap.yml
    cloud:
        config:
          discovery:
            enabled: true # This is required
            service-id: configserver # Config Server's eureka registry name
          enabled: true # This is default true already
    

    配置服务器配置:

    spring:
      application:
        name: configserver # Needs to match client configuration
    

    使用注解 @EnableEurekaClient 注册配置服务器(它应该已经自动配置为注册到 Eureka)

    【讨论】:

    • 我认为规范化名称应该是serviceIdservice-id 是.properties 文件语法
    【解决方案3】:

    Spring Cloud Config 服务为其他各种微服务提供配置信息,Eureka 服务就是其中之一。

    每个应用程序/微服务通过 bootstrap.properties/.yml 指向其配置(来自 Config 服务),该配置在应用程序“识别”它是发现/Eureka 之前加载到该应用程序的父上下文中每个带注释的主类的客户端。 This bit of documentation provides a bit more detail on that process.

    干杯, 标记

    【讨论】:

      【解决方案4】:

      EDIT1:我认为这是一个错误的答案,请参阅回复

      如果你使用 Spring Boot:

      我使用 Spring Microservices in Action 作为我的指南,并基于那里的源代码示例,我们将配置服务器作为带有 @EnableEurekaClient 注释的 Eureka 客户端,在配置服务器 application.yml 中,我们需要添加此属性:

      spring: 
        cloud: 
          config: 
            discovery: 
              enabled: true
      

      而在另一个使用此配置服务器的 Eureka 客户端中,您需要将此属性添加到 application.yml 中:

      spring: 
        cloud: 
          config: 
            enabled: true
      

      就是这样,只要正常设置配置服务器,我认为spring cloud的配置库将在后台使用Eureka处理其余的工作。

      【讨论】:

      • 这个答案不正确。 spring.cloud.config.discovery.enabled 不适用于配置服务器,它适用于需要使用配置服务器的每个应用程序。第二个属性spring.cloud.config.discovery.service-id是配置服务器在eureka注册的应用名称。
      • @George 是的,在谷歌搜索之后我认为你是对的。但我误解了,因为即使没有客户端指定 spring.cloud.config.discovery.enabled ,一切仍然有效
      • 无论如何,您的回答为我指明了正确的方向。那挺好的。谷歌搜索尤里卡和云配置将我带到这里,所以我提出了自己的答案。谢谢。
      • Here 是解释@George 所说内容的文档的链接。
      猜你喜欢
      • 2018-04-29
      • 2015-04-11
      • 2017-09-07
      • 2018-10-18
      • 2015-02-12
      • 2017-07-25
      • 2023-03-24
      • 1970-01-01
      • 2015-08-31
      相关资源
      最近更新 更多