首页 >后端开发 >Golang >如何解决使用 Go 的 mgo 驱动连接 MongoDB Atlas 时出现'No Reachable Server”错误?

如何解决使用 Go 的 mgo 驱动连接 MongoDB Atlas 时出现'No Reachable Server”错误?

Linda Hamilton
Linda Hamilton原创
2024-12-11 01:33:09934浏览

How to Resolve the

使用 Go mgo 连接到 MongoDB Atlas:解决“无法访问服务器”问题

尝试使用以下方式连接到 MongoDB Atlas 副本集时Go 的 mgo 驱动程序,您可能会遇到持续错误“无法访问服务器”。即使您可以使用相同的连接字符串成功连接其他语言,也可能会出现此问题。

此问题的根本原因通常在于 SSL 连接参数配置缺失或不正确。要与 MongoDB Atlas 建立安全连接,您必须使用 TLS 配置。下面的代码片段演示了如何配置 SSL 连接:

package main

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

func main() {
    tlsConfig := &tls.Config{}

    dialInfo := &mgo.DialInfo{
        Addrs: []string{"prefix1.mongodb.net:27017",
            "prefix2.mongodb.net:27017",
            "prefix3.mongodb.net:27017"},
        Database: "authDatabaseName",
        Username: "user",
        Password: "pass",
    }
    dialInfo.DialServer = func(addr *mgo.ServerAddr) (net.Conn, error) {
        conn, err := tls.Dial("tcp", addr.String(), tlsConfig)
        return conn, err
    }
    session, err := mgo.DialWithInfo(dialInfo)
    if err != nil {
        // Handle error
    }

    // Use the session to interact with MongoDB Atlas
}

替代解决方案:

另一个选项是使用 ParseURL 方法来解析 MongoDB Atlas URI 字符串。但是,此方法当前不支持 SSL (mgo.V2 PR:304)。解决方法是在解析之前从 URI 中删除“ssl=true”行。

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

dialInfo, err := mgo.ParseURL(mongoURI)

// Below part is similar to the previous example.
// ... (remainder of code)

通过执行以下步骤,您可以使用 mgo 驱动程序成功连接到 MongoDB Atlas 并解决“无法访问服务器”的问题“问题。

以上是如何解决使用 Go 的 mgo 驱动连接 MongoDB Atlas 时出现'No Reachable Server”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

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