Zookeeper
1 前提条件
- 了解 Dubbo 基本开发步骤
- 安装并启动 Zookeeper
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 节点结构
流程
- 当服务提供者启动时:将自己的 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="*" />
,可以订阅所有分组的服务和所有版本的提供者