dubbo泛化调用导致zk中同一个消费者节点数递增

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";
    }
}

猜你喜欢

转载自blog.csdn.net/u013202238/article/details/108869362