解決MongoDB Atlas 和Golang 的Mgo 的「無可達伺服器」連線問題
使用Golang 的mgo 連接到MongoDB Atlas 副本集時,您可能會遇到“無法存取伺服器”的令人沮喪的錯誤。儘管嘗試了各種 URL 和撥號配置,問題仍然存在。
要解決此問題,請考慮使用 Mgo 的 DialWithInfo 函數的以下解決方案:
import ( "gopkg.in/mgo.v2" "crypto/tls" "net" ) 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)
在此程式碼中,DialInfo.DialServer 函數配置與副本集成員的 SSL 連接。您也可以只指定一個成員為種子,例如 Addrs 為「prefix2.mongodb.net:27017」。
或者,使用 ParseURL 解析 MongoDB Atlas URI 字串是另一個選擇。但是,目前,使用此方法不支援 SSL (mgo.V2 PR:304)。
要解決此問題,請在解析之前刪除 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) //Below part is similar to above. tlsConfig := &tls.Config{} dialInfo.DialServer = func(addr *mgo.ServerAddr) (net.Conn, error) { conn, err := tls.Dial("tcp", addr.String(), tlsConfig) return conn, err } session, _ := mgo.DialWithInfo(dialInfo)
以上是如何解決使用Golang的mgo連線MongoDB Atlas時出現「No Reachable Server」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!