3

我使用withRemotedynamodb 存储后端将我的 java 应用程序连接到在 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));
4

1 回答 1

2

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

也就是说,驱动程序应该自行重新连接。它一直在尝试这样做,connectionPool.reconnectInterval但也许存在一种情况,即您很快就会耗尽所有连接以达到该错误的程度……不确定。无论哪种方式,希望

于 2017-09-26T10:42:10.543 回答