Redis
Redis 注册中心的基本用法和工作原理。
前提条件
- 了解 Dubbo 基本开发步骤
- 安装并启动 Redis 服务
使用说明
<dubbo:registry address="redis://10.20.153.10:6379" />
或者
<dubbo:registry address="redis://10.20.153.10:6379?backup=10.20.153.11:6379,10.20.153.12:6379" />
或者
<dubbo:registry protocol="redis" address="10.20.153.10:6379" />
或者
<dubbo:registry protocol="redis" address="10.20.153.10:6379,10.20.153.11:6379,10.20.153.12:6379" />
选项
- 您可以通过
<dubbo:registry group="dubbo" />
设置 redis 中 key 的前缀,默认为dubbo
。 - 可以通过
<dubbo:registry cluster="replicate" />
设置 redis 集群策略,默认为failover
failover
:只写入和读取任何一个,失败时重试另一个,服务器需要自行配置数据同步replicate
:在客户端同时写入所有服务器,只读取单个服务器,服务器端不需要同步,注册中心集群增加,性能压力也会更大
工作原理
基于 Redis [^1] 实现的注册中心。
Redis 过期数据通过心跳检测脏数据,服务器时间必须同步,对服务器有一定压力,否则过期检测将不准确
使用 Redis 的 Key/Map 结构存储数据结构
- 主 key 是服务名称和类型
- Map 中的 Key 是 URL 地址
- Map 中的 Value 是过期时间,用于判断脏数据,脏数据将被监控中心删除 [^3]
使用 Redis 的发布/订阅事件通知数据更改
- 通过事件的值区分事件类型:
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
和unsubscribe
事件 - 服务监控中心接收到
register
和unregister
事件后,从Key:/dubbo/com.foo.BarService/providers
获取提供者地址列表 - 服务监控中心接收到
subscribe
和unsubscribe
事件后,从Key:/dubbo/com.foo.BarService/consumers
获取消费者地址列表
上次修改时间:2023 年 1 月 2 日: 增强英文文档 (#1798) (95a9f4f6c1c)