-
Notifications
You must be signed in to change notification settings - Fork 21
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
跟楼主讨论些问题 #3
Comments
你可以看看curator的文档,自己思考思考为什么要新建一个定时器,如果网络分区了,导致ZOO_EXPIRED_SESSION_STATE没有收到怎么办? |
嗨,您好,请问可以详细说下吗?我觉得 自己建立定时器的话,可以在session expire 之后防止一次无意义的连接和handshake,并不会影响 ZOO_EXPIRED_SESSION_STATE,以及如果没有收到 ZOO_EXPIRED_SESSION_STATE的影响吧? |
其实也并不是无意义的连接和handshake,zookeeper server就算认为一个session expired了,也会保留该session一段时间,等client来链接之后,通知其已经expired了,才会将这个session 删除。但是server里也有逻辑去清楚长时间expired的session。 但是定一个定时器是很有必要的,如果上层业务已经可以确认改session已经超时,就没必要依赖zk client库对着之前已经expired的一个session id无限重连 zk server,这个session连接很有可能已经因为因为网络分区连不上server了,也有可能运维原因或者zk代码bug,这个session已经再也连不上了。这时候另起一个session尝试重连zk server或许是个不错的选择。 还有一点就是,上层业务需要这个定时器去感知什么时候当前zk中的数据一定是stale了,比如说上层业务注册了一个临时节点,那么定时器到点的时候就是这个临时节点肯定失效的时候,那么对应的业务可能就需要有有对应的状态更改。 |
嗯嗯,了解了,谢谢您~ |
不知道楼主有没有看过zookeeper.h的注释,解决session timeout的重连并没有必要起一个定时器来做。zk的client库会在丢失连接后不停尝试重连,成功重连后,如果已经超时,会触发一个ZOO_EXPIRED_SESSION_STATE的事件,捕获该事件以后就可以做重新建立session的操作。
我自己深知写git项目的不易,但是楼主这个写法难免会误导写zk的新人,建议修改。
The text was updated successfully, but these errors were encountered: