Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

In dubbo-2.7 tag route, dubbo 2.6 client invoke 2.7 server work well but dubbo 2.7 client invoke 2.6 donot work well #3231

Closed
cvictory opened this issue Jan 15, 2019 · 2 comments
Assignees

Comments

@cvictory
Copy link
Contributor

在tag route下, dubbo2.6作为client调用dubbo2.7 server,路由规则已经起效果; dubbo2.7作为client调用dubbo2.6路由规则没有生效。(在dubbo2.7,ops没有配置路由规则的前提下,只通过应用url的tag打标)。
发现问题代码, org.apache.dubbo.rpc.cluster.router.tag.TagRouter:

if (CollectionUtils.isEmpty(invokers)) {
            return invokers;
        }

        if (tagRouterRule == null || !tagRouterRule.isValid() || !tagRouterRule.isEnabled()) {
            return invokers;
        }

没在ops里配置路由规则的时候,需要继续往下走。

----transplate here

Under tag route, dubbo2.6 calls dubbo2.7 server as client, routing rules have been effective; dubbo2.7 as client calls dubbo2.6 routing rules have not taken effect. (In dubbo2.7, ops is not configured with routing rules, only by applying the url tag).
Found the problem code, org.apache.dubbo.rpc.cluster.router.tag.TagRouter:

if (CollectionUtils.isEmpty(invokers)) {
            return invokers;
        }

        if (tagRouterRule == null || !tagRouterRule.isValid() || !tagRouterRule.isEnabled()) {
            return invokers;
        }

When you do not configure routing rules in ops, you need to continue down.

@cvictory cvictory changed the title In dubbo-2.7 tag route, dubbo 2.6 client invoke 2.7 server is well but dubbo 2.7 client invoke 2.6 donot work well In dubbo-2.7 tag route, dubbo 2.6 client invoke 2.7 server work well but dubbo 2.7 client invoke 2.6 donot work well Jan 15, 2019
@cvictory
Copy link
Contributor Author

In dubbo 2.6 , there are some key points in this class com.alibaba.dubbo.rpc.cluster.directory.AbstractDirectory.

   protected void setRouters(List<Router> routers) {
       // copy list
       routers = routers == null ? new ArrayList<Router>() : new ArrayList<Router>(routers);
       // append url router
       String routerkey = url.getParameter(Constants.ROUTER_KEY);
       if (routerkey != null && routerkey.length() > 0) {
           RouterFactory routerFactory = ExtensionLoader.getExtensionLoader(RouterFactory.class).getExtension(routerkey);
           routers.add(routerFactory.getRouter(url));
       }
       // append mock invoker selector
       routers.add(new MockInvokersSelector());
       Collections.sort(routers);
       this.routers = routers;
   }

so should we keep this logic code ?

@chickenlj
Copy link
Contributor

if (tagRouterRule == null || !tagRouterRule.isValid() || !tagRouterRule.isEnabled()) {
            return invokers;
}
I will try to remove this 2.7 specific empty limitation. 

# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants