文章目录
- 问题
- 解决过程
-
- 设置超时时间
- 修改host文件
问题
内网下,java程序不能正常链接zookeeper,使用GUI程序,可以正常链接zookeeper
java.lang.IllegalStateException: zookeeper not connectedat org.apache.dubbo.remoting.zookeeper.curator.CuratorZookeeperClient.<init>(CuratorZookeeperClient.java:83) ~[dubbo-2.7.7.jar:2.7.7]at org.apache.dubbo.remoting.zookeeper.curator.CuratorZookeeperTransporter.createZookeeperClient(CuratorZookeeperTransporter.java:26) ~[dubbo-2.7.7.jar:2.7.7]at org.apache.dubbo.remoting.zookeeper.support.AbstractZookeeperTransporter.connect(AbstractZookeeperTransporter.java:70) ~[dubbo-2.7.7.jar:2.7.7]……
解决过程
设置超时时间
断点调试,发现 url 中timeout为3000,即3秒。考虑适当增加超时时间。改为60000后,可以登录zookeeper。修改方式如下:
dubbo.registry.address=zookeeper://10.10.10.10:2181?timeout=60000
修改host文件
修改超时事件后,可以登录,但依旧会卡大概二十秒左右。按说在内网环境下,不应该这样。于是继续去找,最终发现和之前遇到的一个情况类似,getHostName方法阻塞了很长时间。所以可以在host文件中,添加zookeeper服务器的ip。让getHostName直接使用hosts里面的dns结果。
ip1 host1
ip2 hosts2
添加后,卡顿彻底解决。