steam
2
从 3.0 开始不允许永不过期的 session 了,idle 的时间一定要大于 0;不过一直用的话,就不存在空闲的时间也就不会过期。
Ian
4
nebula-java是否有判断session是否过期的方法
Aiee
5
没有, session 的 ping() 方法只检测 session 持有的连接是否可用, 对 session 本身的过期判断在服务端做的, 如果用过期的 session 发请求给 server 会返回错误
Ian
6
我可以理解为:即使session已经过期,ping() 方法也会返回连接可用?
关于session管理,是否有什么建议或者有一些经典的使用案例可供参考呢?
目前使用的nebula版本是3.1.0, 在使用过程中,有两种方案:
- 每次执行GQL语句都从nebulaPool里获取session, 然后执行 use space命令.用后执行release方法(graph-ocean目测是使用这种方案)
- 在nebulaPool基础上,封装一个sessionManager, 维护session核心,最大数量和GQL任务执行队列(类似AQS实现方式).这样实现session的复用.
对这两种方案是否可行,更推荐使用哪一种方案呢?是否还有其他方案可以推荐一下吗?
求解答
1 个赞
Liu
9
我用的是java 3.0.0的版本,因为有多线程应用的场景,所以自己维护了一个session列表, 系统启动创建10个空闲的session,用了就归还,但是过一晚上就会碰到了session超期的问题,
具体异常为:
2022-07-05T11:00:49.961118696+08:00 Caused by: com.vesoft.nebula.client.graph.exception.IOErrorException: java.net.SocketException: Broken pipe (Write failed)
2022-07-05T11:00:49.961123024+08:00 at com.vesoft.nebula.client.graph.net.SyncConnection.executeWithParameter(SyncConnection.java:192)
2022-07-05T11:00:49.961126954+08:00 at com.vesoft.nebula.client.graph.net.Session.executeWithParameter(Session.java:113)
2022-07-05T11:00:49.961132681+08:00 at com.vesoft.nebula.client.graph.net.Session.execute(Session.java:78)
通过链接发现,默认的session超期时间为8小时 (session_idle_timeout_secs=28800)
我的问题是:
- 可以设置session_idle_timeout_secs=0 表示session永不超期吗 ?
- 如果不可以,那么通过什么方式来判断session超期?难道只能通过cache异常来判断吗?