首页 >后端开发 >Golang >为什么我的 Golang mgo 与 MongoDB Atlas 的连接不断失败,并出现'无法访问服务器”错误?

为什么我的 Golang mgo 与 MongoDB Atlas 的连接不断失败,并出现'无法访问服务器”错误?

Susan Sarandon
Susan Sarandon原创
2024-11-27 19:18:13432浏览

Why Does My Golang mgo Connection to MongoDB Atlas Keep Failing with a

使用 Golang mgo 连接到 MongoDB Atlas:副本集持久“无法访问服务器”

尝试连接时通常会出现此错误消息使用 Golang 的 mgo 驱动程序到 MongoDB Atlas 副本集。要解决此问题,请考虑以下步骤:

利用下面提供的 mgo 代码片段:

import (
    "gopkg.in/mgo.v2"
    "crypto/tls"
    "net"
)

// Configure TLS settings
tlsConfig := &tls.Config{}

// Initialize the DialInfo object
dialInfo := &mgo.DialInfo{
    Addrs: []string{"prefix1.mongodb.net:27017", 
                    "prefix2.mongodb.net:27017",
                    "prefix3.mongodb.net:27017"},
    Database: "authDatabaseName",
    Username: "user",
    Password: "pass",
}

// Override the default DialServer method
dialInfo.DialServer = func(addr *mgo.ServerAddr) (net.Conn, error) {
    conn, err := tls.Dial("tcp", addr.String(), tlsConfig)
    return conn, err
}

// Establish the connection using DialWithInfo
session, err := mgo.DialWithInfo(dialInfo)

请记住,指定单个副本集成员作为种子同样有效选项:

Addrs: []string{"prefix2.mongodb.net:27017"}

有关更多见解,请参阅以下内容资源:

  • [tls.Dial()](https://golang.org/pkg/crypto/tls/#Dial)
  • [DialInfo](https:// godoc.org/gopkg.in/mgo.v 2#DialInfo)
  • [DialWithInfo](https://godoc.org/gopkg.in/mgo.v2#DialWithInfo)

更新:

或者, mgo.ParseURL() 方法可用于解释 MongoDB Atlas URI 字符串。但是,它目前缺乏对 SSL 的支持。

作为解决方法,您可以在解析之前删除 ssl=true 参数:

// URI without ssl=true
var mongoURI = "mongodb://username:[email protected],prefix2.mongodb.net,prefix3.mongodb.net/dbName?replicaSet=replName&authSource=admin"

dialInfo, err := mgo.ParseURL(mongoURI)

// Subsequent code remains similar to the previous example.

以上是为什么我的 Golang mgo 与 MongoDB Atlas 的连接不断失败,并出现'无法访问服务器”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn