Dubbo3 ReferenceConfig 緩存

2022-04-01 17:49 更新

在 Dubbo 中緩存 ReferenceConfig

?ReferenceConfig ?實例很重,封裝了與注冊中心的連接以及與提供者的連接,需要緩存。否則重復(fù)生成 ?ReferenceConfig ?可能造成性能問題并且會有內(nèi)存和連接泄漏。在 API 方式編程時,容易忽略此問題。

因此,自 ?2.4.0 ?版本開始, dubbo 提供了簡單的工具類 ?ReferenceConfigCache?用于緩存 ?ReferenceConfig ?實例。

使用方式如下:

ReferenceConfig<XxxService> reference = new ReferenceConfig<XxxService>();
reference.setInterface(XxxService.class);
reference.setVersion("1.0.0");
......
ReferenceConfigCache cache = ReferenceConfigCache.getCache();
// cache.get方法中會緩存 Reference對象,并且調(diào)用ReferenceConfig.get方法啟動ReferenceConfig
XxxService xxxService = cache.get(reference);
// 注意! Cache會持有ReferenceConfig,不要在外部再調(diào)用ReferenceConfig的destroy方法,導(dǎo)致Cache內(nèi)的ReferenceConfig失效!
// 使用xxxService對象
xxxService.sayHello();

消除 Cache 中的 ?ReferenceConfig?,將銷毀 ?ReferenceConfig ?并釋放對應(yīng)的資源。

ReferenceConfigCache cache = ReferenceConfigCache.getCache();
cache.destroy(reference);

缺省 ?ReferenceConfigCache ?把相同服務(wù) Group、接口、版本的 ?ReferenceConfig ?認(rèn)為是相同,緩存一份。即以服務(wù) Group、接口、版本為緩存的 Key。

可以修改這個策略,在 ?ReferenceConfigCache.getCache? 時,傳一個 ?KeyGenerator?。詳見 ?ReferenceConfigCache ?類的方法。

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


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號