服务引用配置对象缓存
在 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)