- nebula 版本:2.5.0
- 部署方式(分布式 / 单机 / Docker / DBaaS):单机
- 是否为线上版本:Y
session设置过期时间为10s (session_idle_timeout_secs=10),某次查询session失效后,再次去ping,第一次能ping通返回true,然后再ping则返回false。
- 为什么session失效了还能返回ping通的结果?
- 怎么才能保证客户端连接(meta/graph/storage)的高可用?
session设置过期时间为10s (session_idle_timeout_secs=10),某次查询session失效后,再次去ping,第一次能ping通返回true,然后再ping则返回false。
客户端的断线重连是针对部分异常情况的,而且重连的是集群中其他节点,不是当前节点。 可以参考代码 https://github.com/vesoft-inc/nebula-java/blob/fc643c79aa9511e42902ea84a42b7a928225e874/client/src/main/java/com/vesoft/nebula/client/graph/net/Session.java#L87
没有一个完整的针对meta/graph/storage连接的判断机制吗?
meta、storage、session,这三个组件之间互相没有心跳机制;他们的java客户端连接也没有心跳机制,都是一次性使用,如果在一次查询中,出现查询超时,但是设置的过期时间太小,那不是所有的查询都会出错吗?
在客户端去监控neubla服务的高可用很麻烦啊~
出现查询超时一般是进行了长query, 目前没有针对超时做超时时间的自动重试, 你可以来github提issue描述下需求哈
是否有延迟?
客户端怎么判断是延迟还是真的连接失效?
按理说没有延迟的, 你在 ping 完得到 false 后 session 还持有连接吗?
ping() 的作用是判断连接的服务是否可用, 具体实现是故意用一个 invalid sessionID 0 发送 YIELD 1
到当前连接的地址, 只关心网络是否ok
如果没有延迟,那怎么得到true的结果呢?
“持有连接”是什么意思, ping 完得到 false 后 session是invalid的了,不过连接肯定还在,再怎么ping肯定都是false了。
我主要是想知道,客户端怎么判断连接是真的失效了?
ping 只看服务器是否 available,无关session的话,加上 楼主提到了 ping false,看起来 graphclient 到 graphD 确实有不可用的时候呢,可以这么理解么?
另外这里不应该用 ping 来确保session 是 好的,请问 @Aiee 这里最佳的方式是什么呢哈?
此话题已在最后回复的 30 天后被自动关闭。不再允许新回复。