Предложения по управлению обходом графа БД Нептуна - PullRequest
0 голосов
/ 19 февраля 2020

Мы внедрили AWS Neptune DB в качестве реализации графа для нашего решения, у меня возникла проблема с тайм-аутом соединения несколько раз.

Это наша локальная среда разработки (это Springboot приложение), где мы получаем доступ к базе данных Нептуна через ALB, и мы настроили обход, как показано ниже:

@Bean
public GraphTraversalSource createReadGraphTraversalSource(){

LOGGER.debug("Connecting to neptune endpoint : {}", neptuneDBEndpoint);
Cluster cluster = Cluster.build()
    .addContactPoint(neptuneDBEndpoint)
      .port(80)
        .enableSsl(false)
          .serializer(Serializers.GRAPHBINARY_V1D0)
            .create();

LOGGER.trace("Read Traversal source setup successfully");
return traversal().withRemote(DriverRemoteConnection.using(cluster));

}

Затем мы создаем TraversalSources из объекта GraphTraversalSource и используем его для запроса как ниже:

   public List<ObjectTO> findLeadsByProject(String projectSid) throws DatabaseException, RecordNotFoundException {
    List objectVs = null;
    try (GraphTraversal<Vertex, Vertex> graphTraversal = readG.V(parentVSid)) {
        leadVs = graphTraversal.out(GraphEdgeLabels.pHasO.name()).hasLabel(GraphVertexLabels..name()).valueMap()
                .toList();

        objectVs.forEach(vertexMap->{
            final ObjectTO objectTO = objectTOSupplier.get();
            objectTO.setSystemAttributes((Map<EnumAttributes, String>) vertexMap);
            objectVs.add(objectTO);
        });

    } catch (Exception e) {
        throw new DatabaseException(e);
    }

    if (objectVs.isEmpty()) {
        throw new RecordNotFoundException();
    }
    return objectVs;
}

Мой вызов этого API DAO довольно обычный, RestController -> Service -> API DAO.

Проблема, с которой я сталкиваюсь, заключается в том, что когда я делаю запрос, я Можно видеть, что DAO API возвращает результаты в API службы, а API службы делает то же самое с API Rest, но там происходит какая-то ошибка, и мой вызов API заканчивается с внутренней 500-серверной ошибкой. Ошибка Rest API не является проблемой, так как это то, о чем я должен позаботиться, но меня беспокоит то, что последующие вызовы этого API заканчиваются следующей ошибкой.

java .util .concurrent.TimeoutException: истекло время ожидания соединения на хосте {address = neptune- aws -alb.amazon aws .com / X.XXX.XX.XX: 80, hostUri = ws: //X.XXX .XX.XX: 80 / gremlin} - возможно, недоступно

Я не уверен, почему происходит эта ошибка.

...