【问题标题】:Spring DiscoveryClient in local environment本地环境中的 Spring DiscoveryClient
【发布时间】:2022-01-23 22:54:42
【问题描述】:

假设我有两个服务:customerService 和 orderService。两者都是包含在自己的 dockerfile 中的 Springboot 应用程序。

在生产中,它们应该使用 Kubernetes 进行管理。因此,每个服务可能有多个实例。由于服务应该能够通过 REST 相互调用,我想使用 ServiceDiscovery 来获取相应其他类型的服务实例的目的地(例如,customerService 想要获取正在运行的 orderService 实例的主机、端口等)。

我想通过在我的 Spring Boot 服务中使用注入的 DiscoveryClient 来实现这一点。

我了解这在生产中是如何工作的,因为存在 DiscoveryClient 与之通信的 Kubernetes 集群。

但这在没有 Kubernetes 而只有 Docker 运行的本地环境中如何工作?

【问题讨论】:

    标签: spring spring-boot docker kubernetes service-discovery


    【解决方案1】:

    我认为您应该研究 Kubernetes 服务,而不是使用注入的 Discovery 客户端。

    对于服务发现和负载平衡,您可以使用 Kubernetes 中的服务。来自 Kubernetes 文档:

    一种将运行在一组 Pod 上的应用程序公开为 网络服务。使用 Kubernetes,您无需修改​​您的 应用程序使用不熟悉的服务发现机制。 Kubernetes 为 Pod 提供自己的 IP 地址和单个 DNS 名称 一组 Pod,并且可以在它们之间进行负载平衡。

    这样,您还可以避免维护发现服务器实例及其可用性的开销。

    这在没有 Kubernetes 而只有 Docker 运行的本地环境中如何工作?

    您可以使用 spring 配置文件根据您的环境选择此 URL

    例如,您将有两个 spring 配置文件(application-dev、application-prod),在 dev 文件中,第二个应用程序的 URL 将是 localhost 相对的,而在 prod 文件中,URL 将是 DNS作为 Kubernetes 服务设置的一部分,您将获得它。因此,在本地运行时使用配置文件 dev,在生产中运行时使用 prod(或适合您的 Kubernetes 环境的配置文件)。

    【讨论】:

    • 感谢详细解答!您能否说明在哪些情况下我应该使用 DiscoveryClient?
    猜你喜欢
    • 2016-07-27
    • 1970-01-01
    • 2016-11-26
    • 2013-04-24
    • 2019-08-03
    • 2018-11-13
    • 2017-11-12
    • 1970-01-01
    • 2017-04-07
    相关资源
    最近更新 更多