ホームページ >バックエンド開発 >Golang >Go から MongoDB Atlas に接続する方法: タイムアウトとサーバー到達可能性の問題を解決するには?

Go から MongoDB Atlas に接続する方法: タイムアウトとサーバー到達可能性の問題を解決するには?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-03 07:44:40871ブラウズ

How to Connect to MongoDB Atlas from Go: Solving Timeout and Server Reachability Issues?

新しい URL 構造を使用して Go から MongoDB Atlas 接続を確立する (MongoDB 3.6 )

mgo を使用して Go から MongoDB Atlas に接続しようとした以前の試みで、次の問題が発生しました。 DialInfo のタイムアウトとサーバーの到達可能性。これらの問題を調査し、解決策を提供してみましょう。

ゼロ タイムアウト

デフォルトの DialInfo にはゼロ タイムアウトがあり、接続確立プロセスが無期限にブロックされます。これを解決するには、以下を使用してタイムアウトを明示的に設定できます。

dialInfo.Timeout = time.Duration(30)
session, err := mgo.DialWithInfo(dialInfo)

到達不能サーバー

到達不能サーバーに関する懸念は、mgo が SRV 接続文字列 URI 形式 (MongoDB v3) をサポートしていないことに起因しています。 .4)。この制限に対処するには、非 Srv 接続 URI 形式を使用できます。

mongoURI = "mongodb+srv://admin:password@my-atlas-cluster-01.mongodb.net:27017/dbname?ssl=true&retryWrites=true"

SRV 用代替 Go ドライバー

接続 URI で SRV を使用したい場合は、モンゴ・ゴー・ドライバー。以下に例を示します。

mongoURI := "mongodb+srv://admin:password@my-atlas-cluster-01.mongodb.net/dbname?ssl=true&retryWrites=true"

client, err := mongo.NewClient(options.Client().ApplyURI(mongoURI))
if err != nil {
    log.Fatal(err)
}
ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)
defer cancel()
err = client.Connect(ctx)
defer client.Disconnect(ctx)

if err != nil {
    log.Fatal(err)
}
database := client.Database("go")
collection := database.Collection("atlas")

このコードは、mongo-go-driver の現在のバージョン (v1.0.0) と互換性があることに注意してください。

以上がGo から MongoDB Atlas に接続する方法: タイムアウトとサーバー到達可能性の問題を解決するには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。