服务发现是基于微服务的架构的关键原则之一。尝试 手动配置每个客户端或某种形式的约定可能很难做到,并且可以 脆。Curator(Zookeeper 的 Java 库)提供服务 通过服务发现进行发现 扩展。Spring Cloud Zookeeper 使用此扩展进行服务注册和 发现。
激活
包括对 enables 的依赖
设置 Spring Cloud Zookeeper Discovery 的自动配置。org.springframework.cloud:spring-cloud-starter-zookeeper-discovery
对于 Web 功能,您仍然需要包括 .org.springframework.boot:spring-boot-starter-web |
使用 Zookeeper 3.4 版时,您需要更改 包含依赖项的方式,如此处所述。 |
对于 Web 功能,您仍然需要包括 .org.springframework.boot:spring-boot-starter-web |
使用 Zookeeper 3.4 版时,您需要更改 包含依赖项的方式,如此处所述。 |
向 Zookeeper 注册
当客户端向 Zookeeper 注册时,它会提供元数据(例如主机和端口、ID、 和名字)关于它自己。
以下示例显示了 Zookeeper 客户端:
@SpringBootApplication
@RestController
public class Application {
@RequestMapping("/")
public String home() {
return "Hello world";
}
public static void main(String[] args) {
new SpringApplicationBuilder(Application.class).web(true).run(args);
}
}
前面的示例是一个普通的 Spring Boot 应用程序。 |
如果 Zookeeper 位于 以外的位置,则配置必须
提供服务器的位置,如以下示例所示:localhost:2181
spring:
cloud:
zookeeper:
connect-string: localhost:2181
如果使用 Spring Cloud Zookeeper Config,则
前面示例中显示的值需要为 in,而不是 。bootstrap.yml application.yml |
默认服务名称、实例 ID 和端口(取自 )分别是 、Spring Context ID 和 。Environment
${spring.application.name}
${server.port}
在类路径上使应用程序同时成为
一个 Zookeeper“服务”(即它自己注册)和一个“客户端”(即它可以
查询 Zookeeper 以查找其他服务)。spring-cloud-starter-zookeeper-discovery
如果要禁用 Zookeeper 发现客户端,可以设置为 。spring.cloud.zookeeper.discovery.enabled
false
前面的示例是一个普通的 Spring Boot 应用程序。 |
如果使用 Spring Cloud Zookeeper Config,则
前面示例中显示的值需要为 in,而不是 。bootstrap.yml application.yml |
使用 DiscoveryClient
Spring Cloud 支持 OpenFeign(REST 客户端构建器),并通过 Spring Cloud Loadbalancer,使用逻辑服务名称而不是物理 URL。RestTemplate
WebClient
您还可以使用 ,其中
为发现客户端提供了一个简单的 API,该 API 并非特定于 Netflix 的,如
以下示例:org.springframework.cloud.client.discovery.DiscoveryClient
@Autowired
private DiscoveryClient discoveryClient;
public String serviceUrl() {
List<ServiceInstance> list = discoveryClient.getInstances("STORES");
if (list != null && list.size() > 0 ) {
return list.get(0).getUri().toString();
}
return null;
}