【问题标题】:Neo4j Java driver throws "connection reset by peer" exceptionNeo4j Java 驱动程序抛出“对等连接重置”异常
【发布时间】:2021-10-26 00:13:34
【问题描述】:

我们正在使用 Spring Data Neo4j。所有查询都有效,但有时会引发异常:

org.springframework.dao.TransientDataAccessResourceException: Connection to the database failed; Error code 'N/A'; nested exception is org.neo4j.driver.exceptions.ServiceUnavailableException: Connection to the database failed
Caused by: java.io.IOException: Connection reset by peer
    at sun.nio.ch.FileDispatcherImpl.read0(Native Method) ~[na:1.8.0_212]
    at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:39) ~[na:1.8.0_212]
    at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223) ~[na:1.8.0_212]

一段时间后它会恢复连接。

如何解决此问题以立即恢复连接?

【问题讨论】:

  • 只是一个想法,因为没有太多上下文:您是否在查询执行后消费结果?可能是您在对它们进行后处理之前已经关闭了打开的结果。因此,调用consume()list() 或类似方法以尽快将结果水合可能是一个解决方案。

标签: java spring spring-boot neo4j spring-data-neo4j


【解决方案1】:

此异常来自 Neo4j Java 驱动程序,当连接中断时会抛出该异常。一般来说,发生这种情况可能有多种原因。

例如,当驱动程序从内部连接池中获取一个空闲时间过长的连接时,可能会发生这种情况。一些云提供商限制负载均衡器的连接空闲时间。驱动程序在尝试使用此类连接时可能会失败。

您可以启用connection liveness check 来协助解决此问题。它确保在配置的超时时间内空闲的每个连接都会发生短暂的网络交换。如果交换失败,则在提供进一步的驱动程序使用之前选择或建立另一个连接。虽然这涉及额外的网络交换,但它可能会防止可能导致更高级别的重试管理和潜在指数延迟的驱动程序故障。如果您希望测试每个连接,可以将超时设置为零。

示例配置:

var config = Config.builder()
                   .withConnectionLivenessCheckTimeout( 60000, TimeUnit.MILLISECONDS )
                   .build();

var driver = GraphDatabase.driver( URL, AuthTokens, config );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-25
    • 1970-01-01
    • 2012-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多