Dubbo3 應用級服務發現
應用級服務發現是應用程式之間進行服務發現的協議。 因此,要使用應用級服務發現,消費者和伺服器都必須升級到 Dubbo 3.0 並啟用新功能(預設啟用),才能在鏈路中使用應用級服務發現。 利用應用級服務發現的優勢。
開啟方法
伺服器端
應用程式升級到 Dubbo 3.0 後,伺服器端將自動開啟介面級 + 應用級雙註冊功能,開發者預設無需修改任何配置。
消費者端
應用程式升級到 Dubbo 3.0 後,消費者端自動開啟介面級 + 應用級雙訂閱功能,開發者預設無需修改任何配置,建議在伺服器端升級到 Dubbo 3.0 並開啟應用級註冊後,通過規則配置消費者端關閉介面級訂閱以釋放相應的記憶體空間。
詳細說明
伺服器端配置
- 全域開關
應用程式配置(可通過配置文件或 -D 指定)dubbo.application.register-mode
啟用實例的全域註冊開關(僅註冊應用程式級)和全部(同時進行介面級和應用程式級註冊)。配置此開關後,預設情況下,應用程式級地址將註冊到所有註冊中心,以便在消費者端進行服務發現。
範例:[https://github.com/apache/dubbo-samples/blob/master/dubbo-samples-cloud-native/dubbo-servicediscovery-migration/dubbo-servicediscovery-migration-provider2/src/main/resources/ dubbo.properties](https://github.com/apache/dubbo-samples/blob/master/2-advanced/dubbo-samples-service-discovery/dubbo-servicediscovery-migration/dubbo-servicediscovery-migration-provider2/src /main/resources/dubbo.properties)
# double registration
dubbo.application.register-mode=all
# Application-level registration only
dubbo.application.register-mode=instance
- 註冊中心地址參數配置
可以通過在註冊中心地址上設定 `registry-type=service` 來標示該註冊中心專用於應用級服務發現,設定此配置的註冊中心將只執行應用級服務發現。
範例:[https://github.com/apache/dubbo-samples/blob/master/dubbo-samples-cloud-native/dubbo-demo-servicediscovery-xml/servicediscovery-provider/src/main/resources/spring/ dubbo-provider.xml](https://github.com/apache/dubbo-samples/blob/master/2-advanced/dubbo-samples-service-discovery/dubbo-demo-servicediscovery-xml/servicediscovery-provider/src /main/resources/spring/dubbo-provider.xml)
<dubbo:registry address="nacos://${nacos.address:127.0.0.1}:8848?registry-type=service"/>
消費者訂閱模式
FORCE_INTERFACE:僅介面級訂閱,行為與 Dubbo 2.7 及之前版本一致。APPLICATION_FIRST:介面級 + 應用級多訂閱,若應用級可以訂閱到地址,則使用應用級訂閱,若訂閱不到地址,則使用介面級訂閱,以保證遷移過程中的最大相容性。(注意:由於同時訂閱行為,此模式下記憶體用量會有一定程度的增加,因此在所有伺服器都升級到 Dubbo 3.0 後,建議遷移到 FORCE_APPLICATION 模式以減少記憶體用量)FORCE_APPLICATION:僅應用級訂閱,將只使用新的服務發現模型。
消費者配置
- 預設配置(無需配置)
升級到 Dubbo 3.0 後,預設行為是介面級 + 應用級多訂閱,若應用級可以訂閱到地址,則使用應用級訂閱,若訂閱不到地址,則使用介面級訂閱,以保證最大相容性。
- 訂閱參數配置
應用配置(可通過配置文件或 -D 指定)`dubbo.application.service-discovery.migration` 為 `APPLICATION_FIRST` 以啟用多訂閱模式,配置為 `FORCE_APPLICATION` 可強制僅使用應用級訂閱模式。 特定介面的訂閱可以在 `ReferenceConfig` 中的 `parameters` 進行配置,Key 為 `migration.step`,Value 為 `APPLICATION_FIRST` 或 `FORCE_APPLICATION` 鍵值對來配置單一訂閱。
範例:[https://github.com/apache/dubbo-samples/blob/master/dubbo-samples-cloud-native/dubbo-servicediscovery-migration/dubbo-servicediscovery-migration-consumer/src/test/java/ org/apache/dubbo/demo/consumer/DemoServiceConfigIT.java](https://github.com/apache/dubbo-samples/blob/master/2-advanced/dubbo-samples-service-discovery/dubbo-servicediscovery-migration /dubbo-servicediscovery-migration-consumer/src/test/java/org/apache/dubbo/demo/consumer/DemoServiceConfigIT.java)
System.setProperty("dubbo.application.service-discovery.migration", "APPLICATION_FIRST");
ReferenceConfig<DemoService> referenceConfig = new ReferenceConfig<>(applicationModel. newModule());
referenceConfig.setInterface(DemoService.class);
referenceConfig.setParameters(new HashMap<>());
referenceConfig.getParameters().put("migration.step", mode);
return referenceConfig.get();
- 動態配置(最高優先級,可在運行時修改配置)
此配置需要基於配置中心推送,Key 為應用名稱 + `.migration` (例如 `demo-application.migration`),Group 為 `DUBBO_SERVICEDISCOVERY_MIGRATION`。規則主體配置詳見從介面級服務發現遷移到應用級服務發現的指南。
範例:[https://github.com/apache/dubbo-samples/blob/master/dubbo-samples-cloud-native/dubbo-servicediscovery-migration/dubbo-servicediscovery-migration-consumer/src/main/java/ org/apache/dubbo/demo/consumer/UpgradeUtil.java](https://github.com/apache/dubbo-samples/blob/master/2-advanced/dubbo-samples-service-discovery/dubbo-servicediscovery-migration /dubbo-servicediscovery-migration-consumer/src/main/java/org/apache/dubbo/demo/consumer/UpgradeUtil.java)
step: FORCE_INTERFACE