【问题标题】:Running multiple instance microservice using spring cloud config使用 spring cloud config 运行多个实例微服务
【发布时间】:2017-06-19 13:00:19
【问题描述】:

我正在开发一个微服务,使用Spring Boot,它公开了 REST 端点。

为了满足可扩展性的限制,[same] service 的多个实例将被部署(基本上在需要时向上扩展,在不需要时向下扩展)。

我正在使用 Spring Cloud Config Server 为该服务提供配置(例如绑定的端口和其他配置)。

由于服务公开了 REST api,如何配置配置服务器为每个微服务实例提供唯一的端口?

一种可能的解决方案是,在单个机器/VM 中运行服务,或者创建一个 docker 容器并部署该服务。如果无法从云配置服务器为服务提供随机端口,这可能是我的解决方案。

【问题讨论】:

  • 您也可以根据需要使用随机端口。 server.port=0
  • 可扩展性和弹性来自不同机器上的多个实例,在这种情况下端口可以相同。你在使用 Netflix 吗?如果是这样,那么您的服务将在 Eureka 中注册,并通过 Zuul 进行软件负载平衡。多个 Zuul 实例注册到您的网站反向代理,例如Apache 平衡器工作者或硬件设备。

标签: spring spring-boot microservices spring-cloud-config


【解决方案1】:

您可以使用不同的 Spring 配置文件启动这三个实例中的每一个。例如。第一个实例为 SPRING_PROFILES_ACTIVE=prod1,第二个实例为 SPRING_PROFILES_ACTIVE=prod2,依此类推。

然后您可以在 application-prod1.properties、application-prod2.properties 等(或在 yaml 文件中)设置端口。

您也可以在 cloudfoundry 中运行该应用程序。然后,cloudfoundry 将为您创建不同的容器。

【讨论】:

  • 感谢您的建议。这个建议足够接近;但不会完全解决问题。当对服务有更多请求时,我无法扩大到一定水平。
  • 确实如此。您必须提前生成许多 application.properties 文件。然后通过 shell 脚本设置环境变量。但在这种情况下,我更喜欢上面提到的解决方案 Patrick 在他的评论中使用server.port=0
【解决方案2】:

您是否尝试过将 spring-cloud-bus 与 rabbit MQ 一起使用,它基本上是通过 POST bus/refresh 将您的配置更改广播到应用程序的所有实例。

【讨论】:

    猜你喜欢
    • 2018-02-17
    • 1970-01-01
    • 2018-03-28
    • 2021-03-01
    • 2018-03-21
    • 2016-01-27
    • 2020-11-06
    • 2019-12-13
    • 1970-01-01
    相关资源
    最近更新 更多