首頁 >後端開發 >Golang >如何解決使用 Go 的 mgo 驅動程式連線 MongoDB Atlas 時出現「No Reachable Server」錯誤?

如何解決使用 Go 的 mgo 驅動程式連線 MongoDB Atlas 時出現「No Reachable Server」錯誤?

Linda Hamilton
Linda Hamilton原創
2024-12-11 01:33:09933瀏覽

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