【问题标题】:How to do service discovery for Spring Boot REST endpints如何为 Spring Boot REST 端点进行服务发现
【发布时间】:2014-05-27 11:14:47
【问题描述】:

如果我有多个 Spring Boot 嵌入式 tomcat 容器,并且每个容器都可以有类似的服务端点

http://localhost:8080/employeeSelfService/getDetails
http://localhost:8081/employeeSelfService/getDetails

如何使用 2 个微服务进行负载平衡,以便客户端可以根据某些负载平衡技巧访问任何提到的 URL

我想到的一个选择是使用 NetFlix Curator(或)让 apache 网络服务器充当反向代理,但是使用 apache,当您创建服务的新实例时,您将拥有该服务的条目作为httpd.conf 中的成员

Spring Boot 是否提供任何服务发现和负载均衡机制?

【问题讨论】:

  • 选择这样的微服务的原因是,服务可以扩大或缩小,并将自己注册为整个服务套件的一部分。因此,如果您有多个相同服务的实例,则需要服务注册和发现以及负载平衡机制。 Cloud Foundry 就是这样一个示例,您可以在其中扩展应用程序实例。因此,用于推送 WAR 的 Java 构建包甚至可以用于 JAR 可执行文件

标签: spring spring-boot


【解决方案1】:

Spring Boot 不提供此功能,因为它通常已经由运行在 Spring Boot 服务器前面的 apache/nginx 等反向代理提供。

这里有一个例子看这里 nginx 的商业版如何提供dynamically scaling and reducing the upstream nodes 的功能。

所以在这种情况下,它是针对动态实例的,在这种情况下,Spring Boot 进程在初始化/关闭时向上游服务器发出它存在/注销自身的信号。

here在nginx的情况下怎么做,这个过程会因服务器而异。

【讨论】:

    【解决方案2】:

    可以说,管理自己的负载平衡并不是应用程序真正的职责,而 Spring Boot 专注于应用程序(或服务,等价)的实现。我们一直在考虑是否可以在 Spring(Boot 或其他)中提供功能,以便轻松编写自己的负载均衡器或服务注册表应用程序,但即便如此,我认为这不是问题的真正意义所在(或者是吗?)。

    如果我从字面上解释问题和示例用例,我会说最自然的答案是开箱即用的反向代理解决方案(正如其他答案所指出的那样)。我还注意到,这样的反向代理是 PaaS 解决方案必不可少且自然的一部分,因此如果您需要它“正常工作”并且不想了解细节,PaaS 将是一条自然路径(例如,请参阅@ 987654321@ 作为我碰巧研究过的这种解决方案的一个例子)。

    【讨论】:

      【解决方案3】:

      确实 Spring Boot 没有继承对负载平衡的支持。只是为了添加负载平衡的可用解决方案列表,here 是配置 Apache 以进行负载平衡的说明。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-04-21
        • 1970-01-01
        • 2019-05-31
        • 2017-03-14
        • 2015-01-31
        • 2018-10-31
        • 2017-02-16
        • 2023-03-06
        相关资源
        最近更新 更多