libneo4j-client: не могу подключиться, не могу диагностировать - PullRequest
0 голосов
/ 05 марта 2020

Я хочу выполнить основную задачу c подключения к базе данных neo4j с использованием C ++.
Для этого я получил libneo4j-client и скопировал код из https://neo4j-client.net/. Компиляция работает отлично.

Теперь я выполнил следующий код:

neo4j_client_init();

neo4j_connection_t* connection = neo4j_connect("neo4j://user:pass@localhost:7687", NULL, NEO4J_INSECURE);
assert(connection);

Это приводит к тому, что assert останавливает выполнение, так как соединение NULL.
Обратите внимание, что, конечно, я ввел действительное имя пользователя и пароль.

Я убедился, что сервер действительно существует. Открытие localhost: 7474 в браузере открывает ожидаемый интерфейс браузера, принимает имя пользователя и пароль и упоминает, что 7687 является допустимым портом.
Аналогично, доступ к базе данных с использованием cypher-shell также работает нормально.

Насколько я понимаю, neo4j: // localhost: 7687 должен быть правильным адресом.

Я опробовал несколько вариантов этого, например, опуская идентификатор протокола neo4j: //, пытаясь заменить это с идентификаторами bolt, http и https, пробуя 7474 как порт, все комбинации этого.

Затем я попытался получить некоторые данные диагностики c, используя возможности журналирования библиотеки:

FILE* log_file = fopen("log.dat" , "w");
neo4j_logger_provider* logger = neo4j_std_logger_provider(log_file, 1, 0);
neo4j_config_t* config = neo4j_new_config();
neo4j_config_set_username(config, "username");
neo4j_config_set_password(config, "password");
neo4j_config_set_logger_provider(config, logger);

neo4j_connection_t* connection = neo4j_connect("neo4j://localhost:7687", config, NEO4J_INSECURE);
assert(connection);

В результате вызова fopen, log.dat создано, но это все, файл пуст, потом утверждение не выполняется.

На данный момент, я не знаю, что еще Попробуй или как сделать какой нибудь диагноз. Опять же, моя цель - соединиться с базой данных в целом, я не связан с libneo4j-клиентом в частности. Тем не менее, я хочу написать программу, которая может работать в новой системе без дальнейшей установки, поэтому я не могу использовать system() для вызова чего-то вроде cyper-shell, который должен быть установлен. Кроме того, позже будет большой поток данных, поэтому я хочу, чтобы соединение было максимально прямым. Кто-нибудь мудрее меня?

Одна вещь, в которой я не уверен, это совместимость версий libneo4j-client и версии базы данных.
Я также нашел четырехлетний вопрос Использование базы данных Neo4j из C ++ , и я начну читать в Cyper API, но я немного надеюсь, что он будет работать с libneo4j-client.
Редактировать: Согласно https://neo4j.com/developer/c/, libneo4j-client находится в На самом деле это значение по умолчанию, предназначенное для использования в C ++, и нет перечисленных альтернатив.

Редактировать: neo4j-client само по себе также не работает:

$ neo4j-client -u neo4j localhost
error: A secure connection could not be esablished (try --insecure)
$ neo4j-client -u neo4j localhost --insecure
error: Could not agree on a protocol version
$ neo4j-client -u neo4j neo4j://localhost:7687
error: A secure connection could not be esablished (try --insecure)
$ neo4j-client -u neo4j neo4j://localhost:7687 --insecure
error: Could not agree on a protocol version

Означает ли это несовместимость? ? Протокол, который neo4j-client использует не сервер, который использует?

В Не удалось установить соединение с neo4j-клиентом в OS X yosemite , это было решено путем изменения порта, однако, так что не уверен в этом тоже.

1 Ответ

0 голосов
/ 06 марта 2020

Проблема была решена путем понижения версии Neo4J.

Версия 4.0.1 использует более высокую версию протокола болтов, которая до сих пор не документирована и поэтому не используется neo4j-client.
Версия 3.5 использует старый протокол (версия болта 1) и поэтому совместима.

...