page contents

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

Pack 发布于 2019-12-25 15:12
阅读 954
收藏 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

19
Pack
Pack

没有关系

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

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

ClusterUtils.mergeUrl.

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

请先 登录 后评论