Zookeeper

Zookeeper 注册中心的基本用法和工作原理。

1 前提条件

2 使用说明

在此处查看 完整示例代码

2.1 添加 Maven 依赖

<properties>
    <dubbo.version>3.0.8</dubbo.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo</artifactId>
        <version>${dubbo.version}</version>
    </dependency>
    <!-- This dependency helps to introduce Curator and Zookeeper dependencies that are necessary for Dubbo to work with zookeeper as transitive dependencies -->
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-dependencies-zookeeper</artifactId>
        <version>${dubbo.version}</version>
        <type>pom</type>
    </dependency>
</dependencies>

dubbo-dependencies-zookeeper 会自动将 Zookeeper 相关的客户端依赖添加到应用程序中,降低了用户使用 Zookeeper 的成本。如果在使用过程中出现版本兼容性问题,用户也可以自己添加,而不是使用 dubbo-dependencies-zookeeper Curator、Zookeeper Client 等依赖。

由于 Dubbo 使用 Curator 作为与 Zookeeper Server 交互的编程客户端,因此应特别注意 Zookeeper Server 与 Dubbo 版本依赖之间的兼容性

Zookeeper 服务器版本Dubbo 版本Dubbo Zookeeper 依赖包说明
3.4.x 及以下3.0.x 及以上dubbo-dependencies-zookeeper传递依赖 Curator 4.x、Zookeeper 3.4.x
3.5.x 及以上3.0.x 及以上dubbo-dependencies-zookeeper-curator5传递依赖 Curator 5.x、Zookeeper 3.7.x
3.4.x 及以上2.7.x 及以下dubbo-dependencies-zookeeper传递依赖 Curator 4.x、Zookeeper 3.4.x
3.5.x 及以上2.7.x 及以下需要添加 Curator、Zookeeper 等相关的客户端依赖

2.2 配置并启用 Zookeeper

# application.yml
dubbo
 registry
   address: zookeeper://:2181

# dubbo.properties
dubbo.registry.address=zookeeper://:2181

<dubbo:registry address="zookeeper://:2181" />

address 是启用 zookeeper 注册中心必须指定的唯一属性,在生产环境中,address 通常指定为集群地址,例如

address=zookeeper://10.20.153.10:2181?backup=10.20.153.11:2181,10.20.153.12:2181

也可以单独配置协议和地址,例如

<dubbo:registry protocol="zookeeper" address="10.20.153.10:2181,10.20.153.11:2181,10.20.153.12:2181" />

3 高级配置

3.1 身份验证和授权

如果 Zookeeper 启用了身份验证,Dubbo 支持通过指定用户名和密码来传递身份。

# application.yml
dubbo
 registry
   address: zookeeper://:2181
   username: hello
   password: 1234

也可以直接在地址上扩展参数 address=zookeeper://hello:1234@localhost:2181

3.2 组隔离

通过指定 group 属性,可以在同一个 Zookeeper 集群内实现微服务地址的逻辑隔离。例如,可以在一个集群中隔离多套开发环境,并在地址发现级别实现隔离。

# application.yml
dubbo
 registry
   address: zookeeper://:2181
   group: daily1

3.3 其他扩展配置

配置连接和会话过期时间

# application.yml
dubbo
 registry
   address: zookeeper://:2181
   timeout: 30 * 1000* # Connection timeout, default 30s
   session: 60 * 1000* # Session timeout, default 60s

Zookeeper 注册中心还支持一些其他的控制参数,详情请参考 注册中心配置项手册

4 工作原理

4.1 Dubbo2 节点结构

/user-guide/images/zookeeper.jpg

流程

  • 当服务提供者启动时:将自己的 URL 地址写入 /dubbo/com.foo.BarService/providers 目录。
  • 当服务消费者启动时:订阅 /dubbo/com.foo.BarService/providers 目录下的提供者 URL 地址。并将自己的 URL 地址写入 /dubbo/com.foo.BarService/consumers 目录
  • 当监控中心启动时:订阅 /dubbo/com.foo.BarService 目录下的所有提供者和消费者 URL 地址。

支持以下功能

  • 当提供者出现断电等异常宕机时,注册中心能够自动删除提供者信息
  • 当注册中心重启时,能自动恢复注册数据和订阅请求
  • 当 session 过期时,能自动恢复注册数据和订阅请求
  • 当设置 <dubbo:registry check="false" /> 时,失败的注册和订阅请求将被记录,后台会定期重试
  • 可以通过 <dubbo:registry username="admin" password="1234" /> 设置 zookeeper 登录信息
  • 可以通过 <dubbo:registry group="dubbo" /> 设置 zookeeper 的根节点,如果没有配置,则使用默认根节点。
  • 支持 * 通配符 <dubbo:reference group="*" version="*" />,可以订阅所有分组的服务和所有版本的提供者

4.2 Dubbo3 节点结构


上次修改时间:2023 年 1 月 2 日: 增强英文文档 (#1798) (95a9f4f6c1c)