了解有关设置服务注册表和发现或你的Spring Cloud和Spring Boot微服务开发的信息。抽丝剥茧 细说架构那些事——【优锐课】
在微服务世界中,服务注册表和发现扮演着重要的角色,因为我们很可能会运行多个服务实例,并且我们需要一种机制来调用其他服务而不用硬编码它们的主机名或端口号。除此之外,在云环境中,服务实例可以随时启动和关闭。因此,我们需要一些自动服务注册和发现机制。Spring Cloud像往常一样提供Service Registry and Discovery功能,并具有多个选项。我们可以使用Netflix Eureka或Consul进行服务注册和发现。在本文中,我们将学习如何使用SpringCloud Netflix Eureka进行服务注册和发现。
使用Spring Boot和Spring Cloud的微服务
在我之前的文章微服务系列详解—Part 2:使用Spring Cloud Config和Vault进行配置管理中,我们学习了如何在配置服务器中外部存储配置参数以及如何在Vault中安全存储机密。
在这篇文章中,我们将学习:
• 什么是服务注册和发现?
• 基于Spring Cloud Netflix Eureka的服务注册表
• 将微服务注册为Eureka客户
• 使用Eureka Client发现其他服务
假设我们有两个微服务目录服务和库存服务,并且我们正在http://localhost:8181/和http://localhost:8282/上运行两个库存服务实例。现在,我们要从目录服务调用一些清单服务REST端点。我们应该打哪个URL?通常,在这些情况下,我们使用负载均衡器来配置这两个要委派的URL,然后在负载均衡器URL上调用REST端点。精细。
但是,如果你想根据负载动态启动新实例呢?即使只运行几个服务器节点,在负载均衡器配置中手动更新服务器节点详细信息也容易出错且乏味。这就是为什么我们需要自动服务注册机制,并且能够使用一些逻辑服务ID而不是使用特定的IP地址和端口号来调用服务的原因。
我们可以使用Netflix Eureka Server创建服务注册表,并将我们的微服务作为Eureka客户端,这样,一旦启动微服务,它将以逻辑服务ID自动在Eureka Server中注册。然后,其他微服务(也是Eureka客户端)可以使用服务ID来调用REST端点。
Spring Cloud使使用负载平衡RestTemplate创建服务注册表和发现其他服务变得非常容易。
让我们使用Netflix Eureka创建一个Service Registry,这不过是带有Eureka Server启动程序的SpringBoot应用程序。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
我们需要添加@EnableEurekaServer批注,以使你的Spring Boot应用程序成为基于Eureka Server的服务注册表。
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@EnableEurekaServer
@SpringBootApplication
public class ServiceRegistryApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceRegistryApplication.class, args);
}
}
默认情况下,每个Eureka服务器也是Eureka客户端,并且至少需要一个服务URL来定位对等方。由于我们将有一个Eureka Server节点(独立模式),我们将通过在application.properties文件中配置以下属性来禁用此客户端行为。
application.properties
spring.application.name=service-registry
server.port=