【问题标题】:Neo4j server seems to drop connection when processing for 200 secondsNeo4j 服务器在处理 200 秒时似乎断开连接
【发布时间】:2013-05-10 14:07:47
【问题描述】:

我一直在编写 Neo4j 服务器扩展(如此处所述,即托管服务器扩展:http://docs.neo4j.org/chunked/stable/server-plugins.html)。它应该只通过 POST 获取一个字符串(在生产力中它会保存扩展应该处理的信息,但这在这里不再需要关注)。用 Neo4j 1.8.2 和 1.9.RC2 尝试了扩展,结果是一样的。

现在我的问题是,有时这个扩展会做很多工作,可能需要几分钟。但是,恰好在 200 秒后,连接就会丢失。我不确定发生了什么,但似乎服务器正在断开连接。

为了验证这种行为,我编写了一个新的、几乎是空的服务器扩展,它只等待 5 分钟(通过 Thread.sleep())。从测试客户端类,我发布了一些虚拟数据。我使用 Jersey、Apache HTTPcomponents 和纯 Java URL 连接进行了测试。 Jersey 和普通 Java 在 200 秒后重试,HTTP 组件抛出“org.apache.http.NoHttpResponseException: The target server failed to respond”。

我认为这是一个服务器问题,首先是因为在这种情况下异常似乎代表了这一点(在 httpcomponent 的代码中有一条评论说),其次是因为当我将连接超时和/或套接字超时设置为低于200 秒,我得到的只是正常的超时异常。

现在还有一件事:我说过我会发布一些数据。看起来这整个行为取决于发送的数据量。到目前为止,我可以说在发送长度为 ca 的字符串时将其固定下来。 4500 个字符,所描述的行为不会发生,但一切都很好,我得到一个正确的 HTTP 204“无内容”响应。 一旦我发送 ca。超过 6000 个字符,就会发生上述连接中断。我在这里发送的字符串只是虚拟数据。发送的字符串只是一个 'a' 序列,即“aaaaaaaa...”,使用 for 循环创建,分别有 4500 或 6000 次迭代。

在我的生产代码中,我真的很想等到服务器操作完成,但我不知道如何防止连接断开。

Neo4j 服务器上是否有可供配置的选项(我查看了但没有找到任何东西),还是不是服务器的问题,我的客户做错了什么?某处的错误?

感谢您的阅读以及任何帮助或提示!

【问题讨论】:

  • 不确定,但我猜要么有一些 Jersey 配置选项,要么是操作系统的设置。
  • 嗯,有这样的泽西服务器端选项吗?找不到一个。 Neo4j Server 使用哪种 Web 服务器技术?普通的 Jersey 或某种嵌入式 Jetty 或...?
  • 啊,对不起。我在之前的评论中指的是 Jetty。 Jetty 当然是在内部使用的。

标签: neo4j apache-httpcomponents jersey-client


【解决方案1】:

总结一下:我最终发现 Jetty 中存在一个默认超时常量(我认为 Neo4j 当时使用的是 6.x 版)设置为正好 200 秒。这可以使用 Jetty API 进行更改,但 Neo4j 服务器似乎没有提供任何配置它的可能性。 更改为 Neo4j 2.x 最终解决了这个问题(具体原因未知)。对于那些较新版本的 Neo4j,问题不再出现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-26
    • 2017-12-09
    • 1970-01-01
    • 2019-05-08
    • 2023-03-30
    • 2012-09-21
    • 2017-10-25
    相关资源
    最近更新 更多