saleson opened a new issue, #10012:
URL: https://github.com/apache/dubbo/issues/10012

   
   ### Environment
   
   * Dubbo version: 3.5
   * Java version: 1.8
   
   出现该问题的代码:
   ``` java
   private static ReferenceCache refCache = SimpleReferenceCache.getCache();
   
   public static GenericService getService(String serviceName, String version){
     ReferenceConfig<GeniricService> refConf = new ReferenceConfig();
     refConf.setProtocol("zookeeper");
     refConf.setAddress(registryAddress);
     refConf.setRegistry(registryConfig);
     refConf.setGeneric("true");
     refConf.setInterface(serviceName);
     refConf.setVersion(version);
     refConf.setTimeout(5000);
     return refCache.get(refConf);
   }
   ```
   
   ### Expected Behavior
   
   从缓存中获取GenericService
   
   ### Actual Behavior
   
   <!-- What actually happens? -->
   
   
SimpleReferenceCache.get()方法没有从缓存中获取,而是直接调用了ReferenceConfig.get(),且执行了ReferenceConfig.init()另外创建了新的GenericService,
 在zookeeper上也在相应的service节点下添加了consumer节点
   
   SimpleReferenceCache.get(ReferenceConfigBase):
   ```
       public <T> T get(ReferenceConfigBase<T> rc) {
           String key = generator.generateKey(rc);
           Class<?> type = rc.getInterfaceClass();
           Object proxy = rc.get();
   
           references.computeIfAbsent(rc, _rc -> {
               List<ReferenceConfigBase<?>> referencesOfType = 
referenceTypeMap.computeIfAbsent(type, _t -> Collections.synchronizedList(new 
ArrayList<>()));
               referencesOfType.add(rc);
               List<ReferenceConfigBase<?>> referenceConfigList = 
referenceKeyMap.computeIfAbsent(key, _k -> Collections.synchronizedList(new 
ArrayList<>()));
               referenceConfigList.add(rc);
               return proxy;
           });
   
           return (T) proxy;
       }
   ```
   
   
如果使用DubboBootstrap.getInstance().getCache().get(refConf);也会出现一样的情况,DubboBootstrap.getInstance().getCache()返回的是CompositeReferenceCache对象,而CompositeReferenceCache.get(ReferenceConfigBase)方法如下:
   ```
       public <T> T get(ReferenceConfigBase<T> referenceConfig) {
           return referenceConfig.get();
       }
   ```
   
   
可以看出,在CompositeReferenceCache.get(ReferenceConfigBase)方法和SimpleReferenceCache.get(ReferenceConfigBase)方法中都没有使用到缓存。
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to