该版本仍在开发中,尚未被视为稳定。对于最新稳定版,请使用Spring Cloud Zookeeper 5.0.0spring-doc.cadn.net.cn

Zookeeper 服务发现

服务发现是基于微服务架构的关键原则之一。正在努力 手动配置每个客户端或某种约定可能很难做到,而且可以 脆。Curator(Zookeeper 的 Java 库)提供服务 通过服务发现进行发现 延期。Spring Cloud Zookeeper 使用该扩展进行服务注册, 发现。spring-doc.cadn.net.cn

激活

包括对 的依赖org.springframework.cloud:spring-cloud-starter-zookeeper-discovery使 自动配置,用于设置 Spring Cloud Zookeeper Discovery。spring-doc.cadn.net.cn

对于网页功能,你仍然需要包含org.springframework.boot:spring-boot-starter-web.
使用 Zookeeper 3.4 版本时需要更改 你描述的依赖方式。

向Zookeeper注册

当客户端注册Zookeeper时,它会提供元数据(如主机和端口、ID, 以及名称)关于自身的。spring-doc.cadn.net.cn

以下示例展示了一个 Zookeeper 客户端:spring-doc.cadn.net.cn

@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位于其他地方本地主持人:2181,配置必须 提供服务器的位置,如下示例所示:spring-doc.cadn.net.cn

application.yml
spring:
  cloud:
    zookeeper:
      connect-string: localhost:2181
如果你使用 Spring Cloud Zookeeper 配置, 前例所示的值需要为bootstrap.yml而不是application.yml.

默认服务名称、实例ID和端口(取自环境)是${spring.application.name}, Spring Context ID,${server.port}分别。spring-doc.cadn.net.cn

拥有春云启动者Zookeeper 发现在 classpath 上,应用变成了两者 一个是Zookeeper的“服务”(即它会自行注册),另一个是“客户端”(即它可以 查询Zookeeper以查找其他服务)。spring-doc.cadn.net.cn

如果您想禁用 Zookeeper 的发现客户端,可以设置spring.cloud.zookeeper.discovery.enabledfalse.spring-doc.cadn.net.cn

使用 DiscoveryClient

Spring Cloud 支持OpenFeign(一个 REST 客户端构建器),Rest模板Web客户端通过 Spring Cloud 负载均衡器,使用逻辑服务名称而非物理网址。spring-doc.cadn.net.cn

你也可以使用org.springframework.cloud.client.discovery.DiscoveryClient哪 为发现客户端提供一个简单的API,且不专属Netflix,如所示 以下示例:spring-doc.cadn.net.cn

@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;
}