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