Neo4j服务器似乎在处理200秒时断开连接

时间:2013-05-10 14:07:48

标签: neo4j apache-httpcomponents jersey-client

我一直在编写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秒后重试,HTTPcomponents抛出“org.apache.http.NoHttpResponseException:目标服务器无法响应”。

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

现在最重要的是:我说我会发布一些数据。看起来这整个行为取决于发送的数据量。到目前为止,我把它固定下来,当我发送一串长度为ca. 4500个字符,描述的行为不会发生,但一切都很好,我得到一个HTTP 204“无内容”响应是正确的。 我一发送ca. 6000个字符或更多,发生上述连接丢失。我在这里发送的字符串只是虚拟数据。发送的字符串只是一个'a'序列,即“aaaaaaaa ...”,分别用4500或6000次迭代的for循环创建。

在我的高效代码中,我真的想等到服务器操作完成,但我不知道如何阻止连接丢失。

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

感谢阅读和任何帮助或提示!

1 个答案:

答案 0 :(得分:0)

Just to wrap this up: I eventually found out that there exists a default timeout constant in Jetty (version 6.x was used by Neo4j back then, I think) set to exactly 200 seconds. This could be changed using the Jetty API but the Neo4j server did not appear to offer any possibility to configure this. Changing to Neo4j 2.x eventually solved the issue (why exactly is unknown). With those newer version of Neo4j the issue did not come up anymore.