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
。 - 並發送
register
事件至Channel:/dubbo/com.foo.BarService/providers
。 - 當服務消費者啟動時,訂閱來自
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)