【问题标题】:GremlinClient managementGremlin客户管理
【发布时间】:2019-02-08 22:01:12
【问题描述】:

在 C# 中管理 GremlinClient 对象的最佳实践是什么?是创建一个 SingleInstance(通过依赖注入)还是在每次调用后在对象上使用 Dispose 或使用 using

using (var client = new GremlinClient(...))
{
  var results = client.SubmitAsync(query);
}

由于它是与服务器的 Sockets 连接,我认为重用客户端是最佳做法,但我一直收到此错误并且我无法确定根本原因。

Unable to read data from the transport connection: 
An existing connection was forcibly closed by the remote host.

【问题讨论】:

  • 您使用的是哪个版本的 Gremlin.Net?是 3.4.0 吗?

标签: azure-cosmosdb gremlin


【解决方案1】:

建议只使用一个GremlinClient 对象并在整个应用程序中重用它,因为客户端使用连接池,因此可以将相同的连接再次用于不同的请求,而不必为不同的请求创建和拆除一个连接每个请求。从 3.4.0 版本开始,驱动程序还支持请求流水线,这意味着相同的连接可以并行用于不同的请求,从而减少了所需连接的数量。当然,这也只有在您重用客户端时才有效。

但是,您描述的问题可能是由 Gremlin.Net 驱动程序中的错误引起的。如果您使用的是 Gremlin.Net 3.4.0 版,那么可能是this bug 会导致创建大量连接。在这种情况下,您可以通过降级到 3.3.5 来避免这种情况,直到我们发布 3.4.1 版本的修复程序。如果您在 3.3.5 版本中也发现问题,请在TinkerPop's issue tracker 中创建问题以描述问题。

当然,服务器关闭连接可能还有其他原因。这需要进行更深入的调查以了解原因,例如,使用 Wireshark 之类的工具检查驱动程序和 Cosmos DB 之间的网络流量。

【讨论】:

  • 感谢您的回复,您解决了我在创建大量连接时遇到的问题。当登录到监视 GremlinClient.NrConnections 时,它保持稳定在 4(使用默认 ConnectionPoolSettings 时),但随后将是 2158 或 14201(一些随机的大数字),并且将保持相同的数字。我暂时采取了一些变通办法,并将退回到 3.3.5。再次感谢。
  • 3.4.1 上的任何 ETA,我已经对 ResultSet 类型和 StatusAttributes 采取了相当多的依赖项来监视和测量 Cosmos DB RU。有没有可以克隆的分支来测试 3.4.1?
  • 我们的目标是 3 月中旬发布 3.4.1。该版本将在gremlin-usersTwitter 上公布。如果您想在之前尝试一下,那么您可以构建Gremlin.Net yourself from master,从中发布 3.4.1。对于它是否解决您的问题或您是否遇到任何其他问题,我们当然会非常感谢您提供反馈。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-15
  • 1970-01-01
  • 2020-06-06
  • 1970-01-01
  • 1970-01-01
  • 2019-04-12
  • 2019-06-20
相关资源
最近更新 更多