Прямо сейчас я выполняю writeTransactions , закрывая сеанс драйвера neo4j, как предлагается в документации.
Однако я не нашел, как обрабатывать session.close()
, когда естьошибка.Это может привести к тому, что все соединения пула никогда не закроются, и через несколько дней после запуска приложения я получаю много таких ошибок:
(node:1) UnhandledPromiseRejectionWarning:
Unhandled promise rejection (rejection id: 5725):
Neo4jError: Connection acquisition timed out in 60000 ms.
Это конфигурация драйвера:
const driver = neo4j.driver(
process.env.NEO4J_URI,
neo4j.auth.basic(process.env.NEO4J_USER, process.env.NEO4J_PASSWORD),
{
maxConnectionLifetime: 60 * 60 * 1000, // 1 hour
maxConnectionPoolSize: 300,
encrypted: "ENCRYPTION_ON",
trust: "TRUST_CUSTOM_CA_SIGNED_CERTIFICATES",
trustedCertificates: [process.env.NEO4J_TRUSTED_CERTS],
logging: {
level: 'debug',
logger: (level, message) => console.log('+++' + level + ' ' + message)
}
}
);
Вот два способа использования драйвера с транзакциями:
1.Использование async / await и catch
const neo4jsession = driver.session();
var result = await neo4jsession.writeTransaction(tx =>
tx.run("Cypher Query")
).catch(err => {
try {
neo4jsession.close();
} finally {
reject(err);
}
});
neo4jsession.close();
// Do something with result if not undefined
2.Использование then / catch
const neo4jsession = driver.session();
var result = neo4jsession.writeTransaction(tx =>
tx.run("Cypher Query")
);
result.then(items => {
neo4jsession.close();
// do something with items
}).catch(error => {
try {
neo4jsession.close();
} finally {
reject(error);
}
});
Правильно ли я закрываю сессии в обоих случаях?Если нет, как правильно закрыть сеанс для обоих случаев?
Пожалуйста, помогите, это было головной болью в течение нескольких дней = (