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