问题描述
我正在使用Apache Curator v4.3.0(ZK v3.5.8),并且注意到在某些断开连接/重新连接的情况下,我不再向注册的侦听器发送RECONNECTED事件。
CuratorFramework client = ...;
// retry policy is RetryUntilElapsed with Integer.MAX_VALUE
// sessionTimeout is 15 sec
// connectionTimeout is 5 sec
client.getConnectionStateListenable().addListener(new ConnectionStateListener()...
尽管我确实看到ConnectionStateManager会打印状态更改:
[org.apache.zookeeper.ClientCnxn] - Client session timed out,have not heard from server in 15013ms for sessionid 0x10000037e340012,closing socket connection and attempting reconnect
[org.apache.zookeeper.ClientCnxn] - Opening socket connection to server
...
[org.apache.curator.ConnectionState] - Session expired event received
[org.apache.zookeeper.ClientCnxn] - Session establishment complete on server
[org.apache.curator.framework.state.ConnectionStateManager] - State change: RECONNECTED
通常在我看到听众在stateChanged
上打电话之后,但并不总是这样。
CuratorFramework客户端在注册不同侦听器的多个组件之间共享。我没有看到任何限制,每个侦听器只能有一个客户端。但是,当我不共享它时,问题就不会再出现了。
关于如何继续调试此问题的任何建议?
谢谢, 梅隆
解决方法
这似乎是Curator 5.0.0中已修复的错误-https://issues.apache.org/jira/browse/CURATOR-525-如果您可以对5.0.0进行测试,看看它是否可以解决问题。