【问题标题】:Apache Curator connection state listener not always called with RECONNECTED state changeApache Curator 连接状态侦听器并不总是通过 RECONNECTED 状态更改调用
【发布时间】:2020-09-25 11:08:15
【问题描述】:

我正在使用 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 客户端在注册不同侦听器的多个组件之间共享。我没有看到每个听众只有一个客户的任何限制。但是,当我不分享时,问题就不会再出现了。

关于如何继续调试此问题的任何建议?

谢谢, 梅龙

【问题讨论】:

    标签: apache-curator


    【解决方案1】:

    这似乎是 Curator 5.0.0 中修复的错误 - https://issues.apache.org/jira/browse/CURATOR-525 - 如果您可以使用 5.0.0 进行测试,看看它是否解决了问题。

    【讨论】:

    • 谢谢,我已经升级到 5.1.0,但在某些情况下我仍然没有收到 RECONNECT 事件。我仍在研究什么可能是最好的复制品 - 目前,我认为这与多次断开和重新连接同一台机器有关。
    • 我应该注意到,5.1.0 的行为比 4.3.0 好,但是仍然存在一个错误,它不会将重新连接事件传播到侦听器
    • 请在我们的错误数据库中提交一个错误,希望有一个测试用例。
    猜你喜欢
    • 1970-01-01
    • 2015-08-26
    • 1970-01-01
    • 1970-01-01
    • 2021-05-10
    • 2021-09-02
    • 1970-01-01
    • 2021-04-26
    • 2020-05-09
    相关资源
    最近更新 更多