dubbo2.6.8 泛化调用导致zk中同一个消费者节点数递增
泛化调用时,如果检查服务是否存在,服务不存在就会抛出异常,但是在此之前consumer节点已经创建,这样只要大量泛化调用这个不存在的服务,就会导致ZK上的consumer节点越来越多,给ZK造成性能问题
com.alibaba.dubbo.registry.zookeeper.ZookeeperRegistry#doRegister
com.alibaba.dubbo.config.ReferenceConfig
测试代码
@Component
public class DubboGenericInvoker {
@Autowired
private ApplicationConfig application;
@Autowired
private RegistryConfig registry;
public Object invoker(String id, String tag) {
if (StringUtils.hasText(tag)) {
RpcContext.getContext().setAttachment(Constants.TAG_KEY, tag);
}
ReferenceConfig<GenericService> reference = new ReferenceConfig<>();
reference.setApplication(application);
reference.setRegistry(registry);
reference.setInterface("com.bruce.rpc.service.DubboService");
reference.setGeneric(true); // 声明为泛化接口
//reference.setCheck(false);
try {
ReferenceConfigCache cache = ReferenceConfigCache.getCache();
GenericService genericService = cache.get(reference);
Object o = genericService.$invoke("finfById", new String[]{
"java.lang.String"}, new Object[]{
id});
return o;
} catch (Exception ex) {
ex.printStackTrace();
//reference.destroy();
}
return "aaa";
}
}