服務參考配置物件快取

在 Dubbo3 中快取 ReferenceConfig

功能描述

ReferenceConfig 執行個體很重,封裝了與註冊中心的連線以及與提供者的連線,需要快取。否則重複產生 ReferenceConfig 可能會導致效能問題,並產生記憶體和連線洩漏。使用 API 方式程式設計時,很容易忽略這個問題。

因此,從 2.4.0 版本開始,dubbo 提供了一個簡單的工具類別 ReferenceConfigCache 來快取 ReferenceConfig 執行個體。

使用場景

存在動態建立訂閱的場景,例如閘道器。因為 ReferenceConfig 本身很重,會建立很多中間物件,而代理本身可以重複使用,所以這部分的屬性可以透過 ReferenceConfigCache 快取。

如何使用

清除和銷毀

清除快取中的 ReferenceConfig 將銷毀 ReferenceConfig 並釋放相應的資源。

ReferenceConfig<XxxService> reference = new ReferenceConfig<XxxService>();
reference.setInterface(XxxService.class);
reference.setVersion("1.0.0");
 …
ReferenceConfigCache cache = ReferenceConfigCache. getCache();
// The reference object will be cached in the cache.get method, and the ReferenceConfig.get method will be called to start the ReferenceConfig
XxxService xxxService = cache. get(reference);
// Notice! The Cache will hold the ReferenceConfig, do not call the destroy method of the ReferenceConfig outside, causing the ReferenceConfig in the Cache to become invalid!
// Use the xxxService object
xxxService. sayHello();
ReferenceConfigCache cache = ReferenceConfigCache. getCache();
cache.destroy(reference);

預設的 ReferenceConfigCache 將相同服務群組、介面和版本的 ReferenceConfig 視為相同,並快取一份副本。也就是說,服務群組、介面和版本是快取的鍵。

修改策略

您可以修改此策略,在 ReferenceConfigCache.getCache 時傳遞 KeyGenerator。詳細資訊請參閱 ReferenceConfigCache 類別的方法。

KeyGenerator keyGenerator = new...
ReferenceConfigCache cache = ReferenceConfigCache. getCache(keyGenerator);

上次修改時間:2023 年 1 月 2 日:增強英文文件 (#1798) (95a9f4f6c1c)