In my project, this method `ReferenceConfigCache` is used for genericService
calls, caching `ReferenceConfig` instances, for the user is knowing his the
method arguments.Of course, it also looks complicated to use.
In my implementation, I use interfaceName, group and version as a key, used as
follow:
```
MyReferenceConfigCache referenceConfigCache =
MyReferenceConfigCache.getCache();
// 缓存reference实例
GenericService genericService = referenceConfigCache.get(interfaceName,
group, version);
if (genericService == null) {
// 引用远程服务
ReferenceConfig<GenericService> reference = new ReferenceConfig();
reference.setInterface(interfaceName);
reference.setVersion(version);
// 服务分组
if (StringUtils.isNotBlank(group)) {
reference.setGroup(group);
}
// 声明为泛化接口
reference.setGeneric(true);
// 连接注册中心配置
RegistryConfig registry = new RegistryConfig();
// 注册中心协议与地址, 根据实际修改
registry.setAddress(registryAddress);
// 当前消费者应用配置
ApplicationConfig application = new ApplicationConfig();
application.setName("consumer_name");
application.setRegistry(registry);
reference.setApplication(application);
genericService = referenceConfigCache.putIfAbsentAndGet(reference);
}
Object result = genericService.$invoke(methodName, parameterTypes,
args);
```
`MyReferenceConfigCache` some modified methodis as follows:
```
public <T> T get(String interfaceName, String group, String version) {
String key = generator.generateKey(interfaceName, group, version);
ReferenceConfig<?> config = cache.get(key);
if(config != null) {
return (T) config.get();
}
return null;
}
```
```
public <T> T putIfAbsentAndGet(ReferenceConfig<T> referenceConfig) {
String iName = referenceConfig.getInterface();
if(StringUtils.isBlank(iName)) {
throw new IllegalArgumentException("No interface info in
ReferenceConfig" + referenceConfig);
}
String key = generator.generateKey(iName, referenceConfig.getGroup(),
referenceConfig.getVersion());
ReferenceConfig<?> config = cache.get(key);
if(config != null) {
return (T) config.get();
}
cache.putIfAbsent(key, referenceConfig);
config = cache.get(key);
return (T) config.get();
}
```
[ Full content available at:
https://github.com/apache/incubator-dubbo/issues/1293 ]
This message was relayed via gitbox.apache.org for [email protected]