我们在Azure上使用neo4j高可用性群集已有几个月了,我们正面临着.net客户端的问题。
当我们使用Web客户端连接到集群时,一切都很好,我们可以查询节点并显示结果。但是当我们使用具有相同查询的.net客户端时,找不到某个节点。
我们尝试从Web客户端计算节点,结果为850,而.net客户端返回620。
我重新启动了群集中三个虚拟机中的一个,问题解决了。 我们无法弄清楚出了什么问题,我们真的不希望我们的服务不可靠!
您认为问题在哪里?
///更新1
我们遇到了各种不同查询的问题,但最简单的返回节点数的是:
match (t)
return count(t)
和我们使用的C#等价物是:
client.Cypher
.Match("(t)")
.Return<int>("count (t)")
Cypher查询返回850,C#代码返回620个节点。重新启动其中一台机器后,结果变得相似,但是一段时间后再添加一些节点,Web客户端返回的节点计数(Cypher查询)为857,C#客户端代码返回856。 与此同时,我们一直面临着在webclient运行良好时使用c#客户端添加新节点的问题。 VM重新启动再次修复了该问题!
.net客户端是neo4jclient
///更新2
我们尝试使用bolt测试Neo4jDotNetDriver来获取节点数,它运行正常。我们删除了所有节点并尝试用两者来计算节点数,Neo4jClient仍然返回857,而通过bolt连接的Neo4jDotNetDriver工作正常并返回0。
我们也尝试使用neo4jclient创建一些节点,其中许多节点根本没有创建!
答案 0 :(得分:0)
行 经过大量的测试,我们终于弄明白了问题是什么。 客户端没有任何问题。 正如我之前提到的,我们正在使用具有3个VM的Azure上的Neo4j高可用性群集。我们尝试直接从三台不同的PC调用REST API,我们得到了一个错误的响应和另外两个正确的响应。这就是我们开始怀疑我们的请求是否来自群集中不同机器的响应。所以我们尝试使用Neo4j Cypher Shell分别查询每台机器,我们发现其中一台机器与另外两台机器不同步,那就是响应错误结果的机器。 经过对此问题的一些研究后,我们发现这是neo4j配置中的一个错误,它会禁用(注释掉) ha.pull_interval ,让机器在一段时间后不同步。 我们将此间隔设置为10,重新启动机器,现在一切正常!
我只是不知道为什么来自一个客户端的API调用总是被重定向到不同步的机器,如果有人知道原因那就太棒了。