【问题标题】:Getting an error "use of closed network connection"收到错误“使用关闭的网络连接”
【发布时间】:2022-01-06 17:56:33
【问题描述】:

我的应用程序堆栈包括用于后端编程的 Golang 和用于数据库的 MongoDB Atlas Free Tier。我正在尝试从 Stripe CLI 触发事件,我的 GoLang 程序根据某些验证更新了 MongoDB Atlas 中的一堆表。这似乎在大多数情况下都可以正常工作。但在此过程中的某些时候,我在将数据更新到 Mongo Collections 时遇到以下错误。

连接(xxxxx-shard-00-02.ka3rc.mongodb.net:xxx[-15]) 消息头读取不完整:read tcp xxx.xxx.x.xx:xxxxx->xx.xx.xxx.xxx:xxxxx: 使用封闭网络连接

我正在尝试使用我在控制进入我的 Go 程序时打开的同一个 mongo 客户端来执行应用程序中的所有查询。

有谁知道我们会遇到这个错误的原因吗?这可能是由于 Mongo Atlas 限制了免费套餐每分钟的请求数吗?这个问题是随机发生的,当这种情况发生时我无法确定任何模式。

【问题讨论】:

  • 很可能您没有从应用程序驱动程序和服务器保持活动超时设置连接超时,在应用程序理解之前关闭连接,尝试将 maxTimeMS(5000) 添加到连接 uri
  • 我猜你是对的。我认为这与使用同一客户端执行所有查询所花费的时间有关。一旦我将连接字符串的超时更新为 40 秒,我似乎就没有遇到这个问题。顺便说一句,你知道连接的默认超时值吗?
  • 此处提供的默认 Go 驱动程序超时设置:docs.mongodb.com/drivers/go/current/fundamentals/connection

标签: mongodb http go database-connection mongodb-atlas


【解决方案1】:

来自 go driver 客户端选项页面:

https://pkg.go.dev/go.mongodb.org/mongo-driver@v1.8.0/mongo/options#ClientOptions

大多数定时器默认为 0: ( ConnectTimeout , MaxConnIdleTime , SocketTimeout )

这意味着在某些情况下服务器可以关闭连接,但应用程序驱动程序仍然不知道,因此建议在连接初始化阶段明确设置来自客户端的超时。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-10
    • 2017-05-24
    • 2023-03-25
    • 2012-02-17
    • 2015-02-27
    • 2018-08-07
    • 2020-08-22
    • 1970-01-01
    相关资源
    最近更新 更多