Spring Data Neo4J -无法在配置的最大时间内从池中获取连接



我们有一个使用Spring Data Neo4j (SpringBoot v2.7.5)部署到Kubernetes的Reactive REST API。当运行压力测试以确定断点时,一旦服务可以处理的请求量被突破,服务就不会自动恢复,即使在负载下降到服务可以处理的水平之后也是如此。

服务宕机后,Neo4J运行状况指示器显示:"org.neo4j.driver.exceptions。ClientException:无法在配置的最大时间60000ms内从池中获取连接"

关于连接/配置设置,我们使用SDN配置的默认值。

观察:在服务中断之前,只有少量连接被使用,而在服务中断时,正在使用的连接会跳到最大池大小,并观察到上述错误。无论过了多长时间(甚至远远超过最大连接生命周期),服务都无法从池中获取连接。手动关闭并重新启动服务/pod后,服务将返回健康状态。

作为临时解决方案,我们现在检查Neo4J健康指示器,如果出现上述错误,则活动状态设置为down,从而触发Kubernetes自动重新启动服务。然而,我想知道是否有一个潜在的问题与池中的连接没有得到"清理"?

你可以看看这个讨论https://github.com/spring-projects/spring-data-neo4j/issues/2632

我也有同样的问题。问题是,无论是Spring Framework还是Neo4j响应式事务管理器都不会在复杂的响应式流中关闭连接,例如,当有很多内部调用/映射并且在某个地方抛出异常时。

因此,作为一种解决方案,您可以在这些地方添加@Transactional,以避免创建多个事务。

最新更新