page contents

关于dubbo中提供&消费者的timestamp的作用及先后顺序的影响

Pack 发布于 2020-02-09 17:44
阅读 436
收藏 0
分类:Java开发

项目中有一段代码,用于检测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&timestamp=1575871158549&version=1.0.0

就是这个url中的timestamp

298
Pack
Pack

1.没有关系

2.consumer和provider的先后顺序理论上来说是没有关系,如果provider的时间要晚于consumer,说明provider重新注册过(可能是服务重启或者宕机等情况),这种情况下对于consumer来说是没有影响的。

3.timestamp主要在cluster做url合并的时候以及负载均衡做热启动的时候使用

4.ClusterUtils.mergeUrl.

至于你们公司做了这样的改造的原因,可以找一下负责这块代码改造的人问问看。

请先 登录 后评论