首页 > 解决方案 > 如何在 Go 中保持客户端连接到 MongoDB?

问题描述

https://www.mongodb.com/blog/post/mongodb-go-driver-tutorial上的 go-mongo-driver 文档建议如下:

最好的做法是保留一个连接到 MongoDB 的客户端,以便应用程序可以使用连接池 - 您不想为每个查询打开和关闭一个连接。

我的问题是:是否有最佳实践来做到这一点?

我正在运行 RPC 服务并不断侦听请求。当我收到请求时,我会调用 mongo 服务器。我不想做的是不断地连接和断开与 mongo 的连接。

我尝试了一个解决方案,将 mongo 客户端创建为全局变量,然后在主函数中延迟断开连接......这感觉不是一个好的解决方案。

var mongoClient *mongo.Client = buildMongoClient()

func main() {
  defer disconnectFromMongo()
  *** Do all the things *** 
  ...
}

标签: mongodbgo

解决方案


对于mongo-go-driver,mongo 客户端的全局范围变量是要走的路。在幕后,该客户端维护一个 tcp 连接池(通过 MaxPoolSize 公开,默认为 100)并为您处理连接,无论如何您实际上无法控制此抽象


推荐阅读