node-zookeeper-dubbo
node-zookeeper-dubbo copied to clipboard
add default.version support
dubbo 服务指定版本有两种方式
<!-- 统一指定 -->
<dubbo:provider loadbalance="leastactive" delay="-1" version="1.0.0"/>
<dubbo:service interface="top.crazyman.dubbo.service.CommonService" ref="commonService"/>
<!-- 单独指定 -->
<dubbo:provider loadbalance="leastactive" delay="-1"/>
<dubbo:service interface="top.crazyman.dubbo.service.CommonService" ref="commonService" version="1.0.0"/>
在统一指定版本时,向zookeeper中注册服务生成的url参数中没有version, 取而代之的是default.version, 如:dubbo://10.0.75.1:20880/top.crazyman.dubbo.service.CommonService?anyhost=true&application=dubbo-learn-provider&default.delay=-1&default.loadbalance=leastactive&default.version=1.0.0&delay=-1&dubbo=2.6.3&environment=product&generic=false&interface=top.crazyman.dubbo.service.CommonService&methods=getCurrentDate&pid=15440&side=provider×tamp=1541501405883&uptime=1541501405931"
在index.js文件resolveService方法中,在匹配对应服务提供者时,是直接通过queryObj.version来判断的,这里会造成匹配不到正确的服务提供者。index.js
for (let i = 0; i < size; i++) {
const provider = url.parse(decodeURIComponent(children[i]));
const queryObj = qs.parse(provider.query);
if (
queryObj.version === depVal.version &&
queryObj.group === depVal.group &&
provider.protocol === "dubbo:"
) {
providers.push(provider);
}
}
关于excute的问题 我们在想 是否需要改变调整一下动态添加方法的方式 彻底解决方法可能会冲突的问题 初步思路是返回一个新的对象 而不是在原来的类上暴力添加