nebula 版本:v3.2.1
client 版本:3.0.0
部署方式:单机
安装方式:RPM
是否为线上版本:Y
硬件信息
磁盘( HDD)
CPU、内存信息
Java程序连接nebula一段时间后,就会管道破裂
出现该问题后我在论坛中查找到需要在执行完sql后使用release()方法来释放session
之后再getsession()
然后我在执行sql的方法中添加代码段,并把连接数重新设置
在这之后使用一段时间没问题,然后就出现了获取到session之后,
在使用session.execute()方法切换图空间的时候,会直接走到这一步
再补充一个出现的问题
在多次查询 具体的数量没有统计,方法进入后,this.connectionIsBroken.get()这个方法返回为false
wey
3
感觉像是网络不稳定,client 和 server 之间的网络环境是什么样的?能保证连接的稳定么?
实在同一个服务器内的.yml中配置是用的127.0.0.1
wey
5
OK,请 @Aiee @nicole 帮忙看看,这个socket总是坏掉可能是啥原因呢?
进入这个方法后session.execute()
然后就到了下图中,从this.client.executeWithParameter()这个方法中出来之后 直接就进入到catch中了
wey
7
等下,这个是不是 idle 时间长了 session 过期了哈?
如果是这个问题,用最新的 java client 3.3.0,里边支持了 session pool,就不用担心这个问题啦,要不你试试哈?例子参考
这个我倒是没注意看.现在已经改了一部分了 
我看里面方法都是使用的静态方法 我在创建sessionpool的时候不用静态方法有问题吗
我每次请求进入都要去重新获取一次SessionPool吗
wey
12
Session Pool 是一个 pool,一个进程搞一个单例,pool 的大小根据你的并发量来定
cc @nicole @Aiee 纠正我的理解哈
我在项目启动的时候创建一个pool,然后在业务层调用该pool,每次方法执行完成后都去close() ,还是我每次执行方法的时候去创建pool,然后运行完成后去执行close
wey
15
每一个请求都用同一个 SessionPool 去 execute(),只有服务关闭的时候要 close session pool
cc @Aiee
2 个赞
这个session pool里面的ResultSet 有内部的转换方法吗,还是要自己写转换
nicole
17
看你要做什么转换,你可以点进ResultSet这个类中,里面有一些转换方法的
比如用GET SUBGRAPH 获取到的结果 VERTICES和EDGES
应该解析成一对多的实体. 我在examples里面看到这个方法printResult()
转换的结果好像还需要进一步的解析处理.不能直接转换成json格式
wey
19
数据类型分为原始的基本类型比如 string, int 等和图的类型,比如 vertex, edge,这些类型 ResultSet 都有一个封装过的格式,好处是可以方便取里边的关键系信息,这些封装的格式要通过 asXxx 来获得,参考
https://www.siwei.io/nebula-java-happy-parsing-guide/
比如 vertices 中的一个元素是 vertex,可以用 asNode() 来解析,之后的结果里有一些糖方法可以针对 node/vertex 类型做
edges 中的一个元素是 edge,可以用 asRelationship() 来做。