首页 > 后端开发 > Golang > 如何从 Go 连接到 MongoDB Atlas:解决超时和服务器可达性问题?

如何从 Go 连接到 MongoDB Atlas:解决超时和服务器可达性问题?

Mary-Kate Olsen
发布: 2025-01-03 07:44:40
原创
869 人浏览过

How to Connect to MongoDB Atlas from Go: Solving Timeout and Server Reachability Issues?

使用新 URL 结构从 Go 建立 MongoDB Atlas 连接 (MongoDB 3.6)

在之前尝试使用 mgo 从 Go 连接到 MongoDB Atlas 时,您遇到了以下问题DialInfo 超时和服务器可达性。让我们探讨这些问题并提供解决方案:

零超时

默认的 DialInfo 具有零超时,导致连接建立过程无限期阻塞。要解决此问题,您可以使用以下命令显式设置超时:

dialInfo.Timeout = time.Duration(30)
session, err := mgo.DialWithInfo(dialInfo)
登录后复制

无法访问的服务器

您对无法访问的服务器的担忧源于 mgo 缺乏对 SRV 连接字符串 URI 格式的支持(MongoDB v3 .4).要解决此限制,您可以使用非 srv 连接 URI 格式:

mongoURI = "mongodb+srv://admin:password@my-atlas-cluster-01.mongodb.net:27017/dbname?ssl=true&retryWrites=true"
登录后复制

SRV 的替代 Go 驱动程序

如果您更喜欢在连接 URI 中使用 SRV,请考虑使用蒙戈驱动程序。这是一个示例:

mongoURI := "mongodb+srv://admin:password@my-atlas-cluster-01.mongodb.net/dbname?ssl=true&retryWrites=true"

client, err := mongo.NewClient(options.Client().ApplyURI(mongoURI))
if err != nil {
    log.Fatal(err)
}
ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)
defer cancel()
err = client.Connect(ctx)
defer client.Disconnect(ctx)

if err != nil {
    log.Fatal(err)
}
database := client.Database("go")
collection := database.Collection("atlas")
登录后复制

请注意,此代码与当前版本的 mongo-go-driver (v1.0.0) 兼容。

以上是如何从 Go 连接到 MongoDB Atlas:解决超时和服务器可达性问题?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板