目前Dubbo主要支持5种形式的注册中心,其中推荐使用zookeeper注册中心
Multicast 注册中心
Multicast 注册中心不需要启动任何中心节点,只要广播地址一样,就可以互相发现。
- 提供方启动时广播自己的地址
- 消费方启动时广播订阅请求
- 提供方收到订阅请求时,单播自己的地址给订阅者,如果设置了
unicast=false
,则广播给订阅者 - 消费方收到提供方地址时,连接该地址进行 RPC 调用。
组播受网络结构限制,只适合小规模应用或开发阶段使用。组播地址段: 224.0.0.0 - 239.255.255.255
zookeeper 注册中心
Zookeeper 是 Apacahe Hadoop 的子项目,是一个树型的目录服务,支持变更推送,适合作为 Dubbo 服务的注册中心,工业强度较高,可用于生产环境,并推荐使用 [1]。
流程说明:
- 服务提供者启动时: 向
/dubbo/com.foo.BarService/providers
目录下写入自己的 URL 地址 - 服务消费者启动时: 订阅
/dubbo/com.foo.BarService/providers
目录下的提供者 URL 地址。并向/dubbo/com.foo.BarService/consumers
目录下写入自己的 URL 地址 - 监控中心启动时: 订阅
/dubbo/com.foo.BarService
目录下的所有提供者和消费者 URL 地址。
支持以下功能:
- 当提供者出现断电等异常停机时,注册中心能自动删除提供者信息
- 当注册中心重启时,能自动恢复注册数据,以及订阅请求
- 当会话过期时,能自动恢复注册数据,以及订阅请求
- 当设置
<dubbo:registry check="false" />
时,记录失败注册和订阅请求,后台定时重试 - 可通过
<dubbo:registry username="admin" password="1234" />
设置 zookeeper 登录信息 - 可通过
<dubbo:registry group="dubbo" />
设置 zookeeper 的根节点,不配置将使用默认的根节点。 - 支持
*
号通配符<dubbo:reference group="*" version="*" />
,可订阅服务的所有分组和所有版本的提供者
Nacos 注册中心
Nacos 是 Dubbo 生态系统中重要的注册中心实现,其中 dubbo-registry-nacos
则是 Dubbo 融合 Nacos 注册中心的实现。
预备工作
当您将 dubbo-registry-nacos
整合到您的 Dubbo 工程之前,请确保后台已经启动 Nacos 服务。如果您尚且不熟悉 Nacos 的基本使用的话,可先行参考 Nacos 快速入门。建议使用 Nacos 1.0.0
及以上的版本。
快速上手
Dubbo 融合 Nacos 成为注册中心的操作步骤非常简单,大致步骤可分为“增加 Maven 依赖”以及“配置注册中心“。
Redis 注册中心
使用 Redis 的 Key/Map 结构存储数据结构:
- 主 Key 为服务名和类型
- Map 中的 Key 为 URL 地址
- Map 中的 Value 为过期时间,用于判断脏数据,脏数据由监控中心删除 [3]
使用 Redis 的 Publish/Subscribe 事件通知数据变更:
- 通过事件的值区分事件类型:
register
,unregister
,subscribe
,unsubscribe
- 普通消费者直接订阅指定服务提供者的 Key,只会收到指定服务的
register
,unregister
事件 - 监控中心通过
psubscribe
功能订阅/dubbo/*
,会收到所有服务的所有变更事件
调用过程:
- 服务提供方启动时,向
Key:/dubbo/com.foo.BarService/providers
下,添加当前提供者的地址 - 并向
Channel:/dubbo/com.foo.BarService/providers
发送register
事件 - 服务消费方启动时,从
Channel:/dubbo/com.foo.BarService/providers
订阅register
和unregister
事件 - 并向
Key:/dubbo/com.foo.BarService/consumers
下,添加当前消费者的地址 - 服务消费方收到
register
和unregister
事件后,从Key:/dubbo/com.foo.BarService/providers
下获取提供者地址列表 - 服务监控中心启动时,从
Channel:/dubbo/*
订阅register
和unregister
,以及subscribe
和unsubsribe
事件 - 服务监控中心收到
register
和unregister
事件后,从Key:/dubbo/com.foo.BarService/providers
下获取提供者地址列表 - 服务监控中心收到
subscribe
和unsubsribe
事件后,从Key:/dubbo/com.foo.BarService/consumers
下获取消费者地址列表
Simple 注册中心
Simple 注册中心本身就是一个普通的 Dubbo 服务,可以减少第三方依赖,使整体通讯方式一致。