【发布时间】:2017-09-24 03:27:18
【问题描述】:
我正在使用withRemote 将我的 java 应用程序连接到在 AWS 中运行的 gremlin 服务器,并带有 dynamodb 存储后端。几秒后(约 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));
【问题讨论】:
-
我会首先尝试弄清楚为什么会发生连接丢失。另外,我正在删除 DynamoDB 标记,因为问题与它无关。
-
我知道为什么我的连接丢失了。我将 AWS 负载均衡器 TCP 理想超时设置为 60 秒,并且我的大多数 gremlin 调用都在创建数据而没有从 gremlin 服务器返回任何内容,因此它超时了。在发出任何 gremlin 请求之前,我仍然需要弄清楚如何检查连接是否仍然处于活动状态,如果它不处于活动状态则重新连接 - 有人知道如何检查吗?
-
嗨@monali01 甚至我在我的java应用程序中面临同样的问题我正在做 his.graphTraversalSource = this.graph.traversal().withRemote(DriverRemoteConnection.using(cluster)); // g.V().addV()..... 请求 this.graphTraversalSource.close() 这个循环。就像你以前做的那样。您能否分享解决方案以及您是如何解决问题的。提前致谢。
标签: java gremlin tinkerpop3 janusgraph