Spring 本地环境中的 DiscoveryClient
Spring DiscoveryClient in local environment
假设我有两个服务:customerService 和 orderService。两者都是 Spring 包含在其自己的 dockerfile 中的启动应用程序。
在生产环境中,它们应该使用 Kubernetes 进行管理。因此每个服务可能有多个实例。由于服务应该能够通过 REST 相互调用,我想使用 ServiceDiscovery 来获取相应其他类型的服务实例的目的地(例如,customerService 想要获取 运行 orderService 的主机、端口等实例)。
我想通过在我的 Spring 引导服务中使用注入的 DiscoveryClient 来实现这一点。
我了解这在生产中是如何工作的,因为存在与 DiscoveryClient 通信的 Kubernetes 集群。
但这在没有 Kubernetes 而只有 Docker 运行 的本地环境中如何工作?
我认为您应该研究 Kubernetes 服务,而不是使用注入的 Discovery 客户端。
对于服务发现和负载均衡,您可以使用 Kubernetes 中的服务。来自 Kubernetes 文档:
An abstract way to expose an application running on a set of Pods as a
network service. With Kubernetes, you don't need to modify your
application to use an unfamiliar service discovery mechanism.
Kubernetes gives Pods their own IP addresses and a single DNS name for
a set of Pods and can load-balance across them.
这样,您还可以避免维护发现服务器实例及其可用性的开销。
在没有 Kubernetes 只有 Docker 运行 的本地环境中如何工作?
您可以使用 spring 配置文件根据您的环境选择此 URL。
例如,您将有两个 spring 配置文件(application-dev、application-prod),并且在开发文件中,第二个应用程序的 URL 将是本地主机相对的并且在在 prod 文件中,URL 将是您将作为 Kubernetes 服务设置的一部分获得的 DNS。因此,在本地使用 dev while 运行,在生产中使用 prod while 运行(或适合您的 Kubernetes 环境的配置文件)。
假设我有两个服务:customerService 和 orderService。两者都是 Spring 包含在其自己的 dockerfile 中的启动应用程序。
在生产环境中,它们应该使用 Kubernetes 进行管理。因此每个服务可能有多个实例。由于服务应该能够通过 REST 相互调用,我想使用 ServiceDiscovery 来获取相应其他类型的服务实例的目的地(例如,customerService 想要获取 运行 orderService 的主机、端口等实例)。
我想通过在我的 Spring 引导服务中使用注入的 DiscoveryClient 来实现这一点。
我了解这在生产中是如何工作的,因为存在与 DiscoveryClient 通信的 Kubernetes 集群。
但这在没有 Kubernetes 而只有 Docker 运行 的本地环境中如何工作?
我认为您应该研究 Kubernetes 服务,而不是使用注入的 Discovery 客户端。
对于服务发现和负载均衡,您可以使用 Kubernetes 中的服务。来自 Kubernetes 文档:
An abstract way to expose an application running on a set of Pods as a network service. With Kubernetes, you don't need to modify your application to use an unfamiliar service discovery mechanism. Kubernetes gives Pods their own IP addresses and a single DNS name for a set of Pods and can load-balance across them.
这样,您还可以避免维护发现服务器实例及其可用性的开销。
在没有 Kubernetes 只有 Docker 运行 的本地环境中如何工作?
您可以使用 spring 配置文件根据您的环境选择此 URL。
例如,您将有两个 spring 配置文件(application-dev、application-prod),并且在开发文件中,第二个应用程序的 URL 将是本地主机相对的并且在在 prod 文件中,URL 将是您将作为 Kubernetes 服务设置的一部分获得的 DNS。因此,在本地使用 dev while 运行,在生产中使用 prod while 运行(或适合您的 Kubernetes 环境的配置文件)。