Skip to content
New issue

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

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

Already on GitHub? Sign in 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. 

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

No branches or pull requests

2 participants