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 を解析することです。アトラス 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 に接続するときに発生する「到達可能なサーバーがありません」エラーを解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。