You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@dubbo.apache.org by GitBox <gi...@apache.org> on 2021/08/13 02:10:54 UTC

[GitHub] [dubbo] xiaoheng1 opened a new issue #8491: Solve the problem of address delivery in service discovery scenarios

xiaoheng1 opened a new issue #8491:
URL: https://github.com/apache/dubbo/issues/8491


   - [ ] I have searched the [issues](https://github.com/apache/dubbo/issues) of this repository and believe that this is not a duplicate.
   - [ ] I have checked the [FAQ](https://github.com/apache/dubbo/blob/master/FAQ.md) of this repository and believe that this is not a duplicate.
   
   ### Environment
   
   * Dubbo version: 3.1
   * Operating System version: macos
   * Java version: 1.8
   
   ### Steps to reproduce this issue
   
   link #8479
   
   In the service discovery scenario, when the consumer subscribes to the provider, the URL obtained is InstanceAddressURL.
   But the protocolServiceKey is obtained from ThreadLocal, and its setting is done in org.apache.dubbo.registry.client.ServiceDiscoveryRegistryDirectory#notify.
   
   for example:
   
   ```
   ServiceDiscoveryRegistryDirectory
   public synchronized void notify(List<URL> instanceUrls) {
           ......
           // Set the context of the address notification thread.
           RpcServiceContext.setRpcContext(getConsumerUrl());
   
           /**
            * 3.x added for extend URL address
            */
           ExtensionLoader<AddressListener> addressListenerExtensionLoader = ExtensionLoader.getExtensionLoader(AddressListener.class);
           List<AddressListener> supportedListeners = addressListenerExtensionLoader.getActivateExtension(getUrl(), (String[]) null);
           if (supportedListeners != null && !supportedListeners.isEmpty()) {
               for (AddressListener addressListener : supportedListeners) {
                   instanceUrls = addressListener.notify(instanceUrls, getConsumerUrl(), this);
               }
           }
   
           refreshOverrideAndInvoker(instanceUrls);
       }
   ```
   
   
   ```
   DubboInvoker
   protected Result doInvoke(final Invocation invocation) throws Throwable {
           RpcInvocation inv = (RpcInvocation) invocation;
           final String methodName = RpcUtils.getMethodName(invocation);
           inv.setAttachment(PATH_KEY, getUrl().getPath());
           inv.setAttachment(VERSION_KEY, version);
          ......
   ```
   
   The calling thread and the thread that set the consumerUrl are not the same thread, which will cause the consumerUrl to not be delivered.
   
   Solution:
   Modify the value of InstanceAddressURL through AddressListener to include consumerUrl, and then when InstanceAddressUrl gets the value, if it is empty, it will get it from its own URL property.


-- 
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: notifications-unsubscribe@dubbo.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@dubbo.apache.org
For additional commands, e-mail: notifications-help@dubbo.apache.org


[GitHub] [dubbo] xiaoheng1 closed issue #8491: Solve the problem of address delivery in service discovery scenarios

Posted by GitBox <gi...@apache.org>.
xiaoheng1 closed issue #8491:
URL: https://github.com/apache/dubbo/issues/8491


   


-- 
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: notifications-unsubscribe@dubbo.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@dubbo.apache.org
For additional commands, e-mail: notifications-help@dubbo.apache.org