服务注册 Zookeeper
1、配置并启用 Zookeeper
# application.yml
dubbo
registry
address: zookeeper://localhost:2181
# dubbo.properties
dubbo.registry.address=zookeeper://localhost:2181
<dubbo:registry address="zookeeper://localhost:2181" />
address
是启用 zookeeper 注册中心唯一必须指定的属性,而在生产环境下,address
通常被指定为集群地址,如
address=zookeeper://10.20.153.10:2181?backup=10.20.153.11:2181,10.20.153.12:2181
protocol 与 address 分开配置的模式也可以,如
<dubbo:registry protocol="zookeeper" address="10.20.153.10:2181,10.20.153.11:2181,10.20.153.12:2181" />
2、高级配置
1、认证服务
如果 Zookeeper 开启认证,Dubbo 支持指定 username、password 的方式传入身份标识。
# application.yml
dubbo
registry
address: zookeeper://localhost:2181
username: hello
password: 1234
2、分组隔离
通过指定 group
属性,可以在同一个 Zookeeper 集群内实现微服务地址的逻辑隔离。比如可以在一套集群内隔离出多套开发环境,在地址发现层面实现隔离。
# application.yml
dubbo
registry
address: zookeeper://localhost:2181
group: daily1
3、配置过期时间
配置连接、会话过期时间
# application.yml
dubbo
registry
address: zookeeper://localhost:2181
timeout: 30 * 1000* # 连接超时时间,默认 30s
session: 60 * 1000* # 会话超时时间,默认 60s
配置大全:
注册中心配置。
对应的配置类:
org.apache.dubbo.config.RegistryConfig
。同时如果有多个不同的注册中心,可以声明多个<dubbo:registry>
标签,并在<dubbo:service>
或<dubbo:reference>
的registry
属性指定使用的注册中心。
属性 | 对应URL参数 | 类型 | 是否必填 | 缺省值 | 作用 | 描述 | 兼容性 |
---|---|---|---|---|---|---|---|
id | string | 可选 | 配置关联 | 注册中心引用BeanId,可以在<dubbo:service registry=“”>或<dubbo:reference registry=“”>中引用此ID | 1.0.16以上版本 | ||
address | host:port | string | 必填 | 服务发现 | 注册中心服务器地址,如果地址没有端口缺省为9090,同一集群内的多个地址用逗号分隔,如:ip:port,ip:port,不同集群的注册中心,请配置多个dubbo:registry标签 | 1.0.16以上版本 | |
protocol | string | 可选 | dubbo | 服务发现 | 注册中心地址协议,支持dubbo , multicast , zookeeper , redis , consul(2.7.1) , sofa(2.7.2) , etcd(2.7.2) , nacos(2.7.2) 等协议 | 2.0.0以上版本 | |
port | int | 可选 | 9090 | 服务发现 | 注册中心缺省端口,当address没有带端口时使用此端口做为缺省值 | 2.0.0以上版本 | |
username | string | 可选 | 服务治理 | 登录注册中心用户名,如果注册中心不需要验证可不填 | 2.0.0以上版本 | ||
password | string | 可选 | 服务治理 | 登录注册中心密码,如果注册中心不需要验证可不填 | 2.0.0以上版本 | ||
transport | registry.transporter | string | 可选 | netty | 性能调优 | 网络传输方式,可选mina,netty | 2.0.0以上版本 |
timeout | registry.timeout | int | 可选 | 5000 | 性能调优 | 注册中心请求超时时间(毫秒) | 2.0.0以上版本 |
session | registry.session | int | 可选 | 60000 | 性能调优 | 注册中心会话超时时间(毫秒),用于检测提供者非正常断线后的脏数据,比如用心跳检测的实现,此时间就是心跳间隔,不同注册中心实现不一样。 | 2.1.0以上版本 |
zone | zone | string | 可选 | 服务治理 | 注册表所属区域,通常用于流量隔离 | 2.7.5以上版本 | |
file | registry.file | string | 可选 | 服务治理 | 使用文件缓存注册中心地址列表及服务提供者列表,应用重启时将基于此文件恢复,注意:两个注册中心不能使用同一文件存储 | 2.0.0以上版本 | |
wait | registry.wait | int | 可选 | 0 | 性能调优 | 停止时等待通知完成时间(毫秒) | 2.0.0以上版本 |
check | check | boolean | 可选 | true | 服务治理 | 注册中心不存在时,是否报错 | 2.0.0以上版本 |
register | register | boolean | 可选 | true | 服务治理 | 是否向此注册中心注册服务,如果设为false,将只订阅,不注册 | 2.0.5以上版本 |
subscribe | subscribe | boolean | 可选 | true | 服务治理 | 是否向此注册中心订阅服务,如果设为false,将只注册,不订阅 | 2.0.5以上版本 |
dynamic | dynamic | boolean | 可选 | true | 服务治理 | 服务是否动态注册,如果设为false,注册后将显示为disable状态,需人工启用,并且服务提供者停止时,也不会自动取消注册,需人工禁用。 | 2.0.5以上版本 |
group | group | string | 可选 | dubbo | 服务治理 | 服务注册分组,跨组的服务不会相互影响,也无法相互调用,适用于环境隔离。 | 2.0.5以上版本 |
version | version | string | 可选 | 服务发现 | 服务版本 | 1.0.0以上版本 | |
simplified | simplified | boolean | 可选 | false | 服务治理 | 注册到注册中心的URL是否采用精简模式的(与低版本兼容) | 2.7.0以上版本 |
extra-keys | extraKeys | string | 可选 | 服务治理 | 在simplified=true时,extraKeys允许你在默认参数外将额外的key放到URL中,格式:“interface,key1,key2”。 | 2.7.0以上版本 | |
useAsConfigCenter | boolean | 可选 | 服务治理 | 该注册中心是否作为配置中心使用 | 2.7.5以上版本 | ||
useAsMetadataCenter | boolean | 可选 | 服务治理 | 该注册中心是否作为元数据中心使用 | 2.7.5以上版本 | ||
accepts | accepts | string | 可选 | 服务治理 | 该注册中心接收rpc协议列表,多协议用逗号隔开,例如dubbo,rest | 2.7.5以上版本 | |
preferred | preferred | boolean | 可选 | 服务治理 | 是否作为首选注册中心。当订阅多注册中心时,如果设为true,该注册中心作为首选 | 2.7.5以上版本 | |
weight | weight | int | 可选 | 性能调优 | 注册流量权重。使用多注册中心时,可通过该值调整注册流量的分布,当设置首选注册中心时该值不生效 | 2.7.5以上版本 | |
registerMode | register-mode | string | 可选 | all | 服务治理 | 控制地址注册行为,应用级服务发现迁移用。 * instance 只注册应用级地址; * interface 只注册接口级地址; * all(默认) 同时注册应用级和接口级地址; | 3.0.0以上版本 |
enableEmptyProtection | enable-empty-protection | boolean | 可选 | true | 服务治理 | 是否全局启用消费端的空地址列表保护,开启后注册中心的空地址推送将被忽略,默认 true | 3.0.0以上版本 |
parameters | 无 | Map<string, string> | 可选 | 服务治理 | 扩展预留,可扩展定义任意参数,所有扩展参数都将原样反映在 URL 配置上 | 2.0.0以上版本 |
3、Zookeeper 节点结构
流程:
- 服务提供者启动时: 向
/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="*" />
,可订阅服务的所有分组和所有版本的提供者
4、注册中心的实质
注册中心实质上是一个集中存储和管理服务元数据信息的组件。它在Dubbo框架中扮演着重要角色,用于实现服务的注册、发现和通知。
具体来说,注册中心是一个独立的服务,它维护着一个服务目录,记录了可用的服务提供者的地址、协议、调用方式等信息。服务提供者在启动时,会向注册中心注册自己提供的服务,并定期发送心跳保持连接。而服务消费者则可以通过注册中心查询和订阅自己所需的服务,获取可用的服务提供者列表。
注册中心的实质可以是多种不同的实现,Dubbo框架支持多种注册中心,如Zookeeper、Redis、Multicast、Simple等。不同的注册中心实现方式可能有所差异,但其核心功能都是提供服务的注册、发现和通知功能。
所需的服务,获取可用的服务提供者列表。
注册中心的实质可以是多种不同的实现,Dubbo框架支持多种注册中心,如Zookeeper、Redis、Multicast、Simple等。不同的注册中心实现方式可能有所差异,但其核心功能都是提供服务的注册、发现和通知功能。
总而言之,注册中心的实质是一个集中管理服务元数据信息的组件,它提供了服务的注册和发现功能,帮助服务提供者和消费者之间实现解耦和动态扩展,从而构建一个高可用、弹性和可伸缩的分布式服务架构。