项目中有一段代码,用于检测dubbo中consumer provider在zk中注册的先后顺序,也就是比较两者在zk注册后的url中timestamp属性值。
如果consumer的时间比provider时间早(小),则报错。
据了解这段代码是因为之前由于服务注册问题导致了一些生产事故。
所以想请教下:
1.这个timestamp的作用,跟dubbo缓存是否有关系;
2.consumer和provider的timestamp先后顺序是否影响服务调用;
3.以及dubbo官方是否有相关文档介绍;
4.相关源码在哪,方便明确目标快速理解。
部分源码:
String pTimestamp = DubboUtil.getUrlParamValue(pDecode, "timestamp");
String cUrl = cChildren.get(0).split(",")[0];
String cDecode = URLDecoder.decode(cUrl, "UTF-8");
String cTimestamp = DubboUtil.getUrlParamValue(cDecode, "timestamp");
if (Instant.ofEpochMilli(Long.parseLong(pTimestamp))
.compareTo(Instant.ofEpochMilli(Long.parseLong(cTimestamp))) > 0) {
timeStampErr.add(clazz);
}
样例url
http://xxx:8080/test/services/com.hehehe.SomeInterfaceManage?anyhost=true&application=xx-provider&dubbo=2.5.3&interface=com.someInterfaceManage&methods=someMethod&pid=26348&revision=alpha&server=servlet&side=provider×tamp=1575871158549&version=1.0.0
就是这个url中的timestamp
没有关系
consumer和provider的先后顺序理论上来说是没有关系,如果provider的时间要晚于consumer,说明provider重新注册过(可能是服务重启或者宕机等情况),这种情况下对于consumer来说是没有影响的。
timestamp主要在cluster做url合并的时候以及负载均衡做热启动的时候使用
ClusterUtils.mergeUrl.
至于你们公司做了这样的改造的原因,可以找一下负责这块代码改造的人问问看。