关闭远程连接的Gremlin服务器 - 如何自动重新连接?

时间:2017-09-24 03:27:18

标签: java gremlin tinkerpop3 janusgraph

我正在使用withRemote将我的java应用程序连接到使用dynamodb存储后端在AWS中运行的gremlin服务器。我在几秒钟(~3.3秒)后得到连接超时:

org.apache.tinkerpop.gremlin.process.remote.RemoteConnectionException: java.lang.RuntimeException: java.util.concurrent.ExecutionException: java.nio.channels.ClosedChannelException]]

我需要弄清楚如何重新连接,这意味着检测连接是否已关闭。我不知道如何检测到这一点。我在使用图遍历时有上述异常,有没有办法在之前发现它并重新连接,或者配置中是否有允许自动重新连接的选项(比如在关闭之前创建新连接)所以我的应用程序始终连接?

如果您需要,这就是我进行连接的方式 - 当前连接部分在应用程序启动时是单例:

  this.graph = EmptyGraph.instance();
  GryoMessageSerializerV1d0 gryoMessageSerializerV1d0 = new GryoMessageSerializerV1d0(
        GryoMapper.build().addRegistry(JanusGraphIoRegistry.getInstance()));
  this.cluster = Cluster.build().serializer(gryoMessageSerializerV1d0)
        .addContactPoint(configuration.getString("graphDb.host", "localhost"))
        .port(configuration.getInt("graphDb.port", 8182)).create();
  this.graphTraversalSource = this.graph.traversal().withRemote(DriverRemoteConnection.using(cluster));

1 个答案:

答案 0 :(得分:2)

我觉得connection.keepAlive configuration option已经解决了这个问题。默认为180秒,因此它比负载均衡器中60秒的超时时间长,这就是它放弃的原因。

那就是说,司机应该自己重新连接。考虑到connectionPool.reconnectInterval,它一直在努力做到这一点,但也许有一种情况,你很快就会耗尽所有的连接,直到得到这个错误......不确定。无论哪种方式,希望