测试环境的dubbo服务提供者出现多个重复提供者,且停服务后服务节点无法摘除。
zookeeper客户端使用的curator,首先排查curator创建的节点是否是临时节点,在本地环境起服务调试到AbstractZookeeperClient:
@Override
public void create(String path, boolean ephemeral) {
if (!ephemeral) {
if (checkExists(path)) {
return;
}
}
int i = path.lastIndexOf('/');
if (i > 0) {
create(path.substring(0, i), false);
}
if (ephemeral) {
createEphemeral(path);
} else {
createPersistent(path);
}
}
发现确实走的createEphemeral(path);
用zkCli.sh get查看dubbo provider节点发现确实也是临时节点:

非原图,信息类似。
再查看tickTime、initLimit、syncLimit等配置项也正常。
排查到这里有点没头绪了,然后找到网上有人也遇到多个相同提供者问题,而他问题的原因是服务器时间不正确,于是查看了zookeeper服务器时间和提供者服务器时间,发现仍然是正确的。</

测试环境中,Dubbo服务提供者出现重复节点且停止服务后无法从Zookeeper中自动移除。经排查,确认节点为临时节点,Zookeeper配置正常,时间戳问题成为关键。发现由于过去系统在Zookeeper上创建的节点时间戳停留在2020年,与当前时间不符,导致session关闭后临时节点未删除。解决方案是通过Curator删除时间戳异常的临时节点。
最低0.47元/天 解锁文章
2734

被折叠的 条评论
为什么被折叠?



