请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

会话重连的问题不是很理解,为什么Thread六秒 超过了timeout时间 还是能重连上,同一sessionId的TCP连接已经断开了。

public class ZKConnectSessionWatcher implements Watcher {

final static Logger log = LoggerFactory.getLogger(ZKConnectSessionWatcher.class);

public static final String zkServerPath = "192.168.0.130:2181";
public static final Integer timeout = 5000;

public static void main(String[] args) throws Exception {
	
	ZooKeeper zk = new ZooKeeper(zkServerPath, timeout, new ZKConnectSessionWatcher());
	
	long sessionId = zk.getSessionId();
	String ssid = "0x" + Long.toHexString(sessionId);
	System.out.println(ssid);
	byte[] sessionPassword = zk.getSessionPasswd();
	log.warn("客户端开始连接zookeeper服务器...");
	log.warn("连接状态:{}", zk.getState());
	Thread.sleep(1000);
	log.warn("连接状态:{}", zk.getState());
	Thread.sleep(6000);
	// 开始会话重连
	log.warn("开始会话重连...");
	ZooKeeper zkSession = new ZooKeeper(zkServerPath, 
										timeout, 
										new ZKConnectSessionWatcher(), 
										sessionId, 
										sessionPassword);
	log.warn("重新连接状态zkSession:{}", zkSession.getState());
    Thread.sleep(1000);
	log.warn("重新连接状态zkSession:{}", zkSession.getState());
}

@Override
public void process(WatchedEvent event) {
	log.warn("接受到watch通知:{}", event);
}

}

2018-10-01 17:24:08,001 [main] [com.imooc.zk.demo.ZKConnectSessionWatcher.main(ZKConnectSessionWatcher.java:29)] - [WARN] 客户端开始连接zookeeper服务器…
2018-10-01 17:24:08,005 [main] [com.imooc.zk.demo.ZKConnectSessionWatcher.main(ZKConnectSessionWatcher.java:30)] - [WARN] 连接状态:CONNECTING
2018-10-01 17:24:08,027 [main-EventThread] [com.imooc.zk.demo.ZKConnectSessionWatcher.process(ZKConnectSessionWatcher.java:48)] - [WARN] 接受到watch通知:WatchedEvent state:SyncConnected type:None path:null
2018-10-01 17:24:09,006 [main] [com.imooc.zk.demo.ZKConnectSessionWatcher.main(ZKConnectSessionWatcher.java:32)] - [WARN] 连接状态:CONNECTED
2018-10-01 17:24:15,007 [main] [com.imooc.zk.demo.ZKConnectSessionWatcher.main(ZKConnectSessionWatcher.java:35)] - [WARN] 开始会话重连…
2018-10-01 17:24:15,022 [main] [com.imooc.zk.demo.ZKConnectSessionWatcher.main(ZKConnectSessionWatcher.java:41)] - [WARN] 重新连接状态zkSession:CONNECTING
2018-10-01 17:24:15,038 [main-EventThread] [com.imooc.zk.demo.ZKConnectSessionWatcher.process(ZKConnectSessionWatcher.java:48)] - [WARN] 接受到watch通知:WatchedEvent state:SyncConnected type:None path:null
Disconnected from the target VM, address: ‘127.0.0.1:50181’, transport: 'socket’
2018-10-01 17:24:16,022 [main] [com.imooc.zk.demo.ZKConnectSessionWatcher.main(ZKConnectSessionWatcher.java:43)] - [WARN] 重新连接状态zkSession:CONNECTED

正在回答 回答被采纳积分+3

2回答

风间影月 2018-10-01 18:41:12

这个timeout是超时时间,就是服务和客户端之间会有心跳,超过这个时间就默认客户端已死,这个代码中其实客户端和服务端一直连着

0 回复 有任何疑惑可以回复我~
  • 提问者 慕粉1124262302 #1
    我用netstat -ant 命令看了下  再次连接的端口号变了  是不是可以理解为超过了timeout时间,第一次建立的TCP连接已经断开,第二次连接是另外建立的套接字,但是因为sessionId和password,所以是同一个会话?
    回复 有任何疑惑可以回复我~ 2018-10-01 20:16:17
  • 端口??2181? 这个不会变啊,是不是你环境有问题
    回复 有任何疑惑可以回复我~ 2018-10-01 20:18:52
  • 提问者 慕粉1124262302 回复 风间影月 #3
    2181是不会变  但是客户端端口号就改变   一个TCP连接不是  server port  server ip  client port  client ip 分辨的吗
    回复 有任何疑惑可以回复我~ 2018-10-01 20:26:23
提问者 慕粉1124262302 2018-10-01 17:37:14

zookeeper客户端和服务器端的连接状态怎么理解?

0 回复 有任何疑惑可以回复我~
  • 连接中,连接了,连接关闭,主要是这三种
    回复 有任何疑惑可以回复我~ 2018-10-01 20:23:32
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信