MGO を使用した Go での MongoDB 接続障害からの回復
Go では、MGO パッケージを使用して MongoDB と対話します。ただし、MongoDB への接続が失敗し、プログラムでパニックが発生する場合があります。この記事では、このような接続障害から正常に回復するための解決策を提供します。
次の関数は MongoDB への接続を試行し、成功するとセッションとコレクションを返します:
func connectToMongo(sess *mgo.Session, coll *mgo.Collection, sessionErr error) bool { fmt.Println("enter main - connecting to mongo") defer func() { if r := recover(); r != nil { fmt.Println("Detected panic") var ok bool err, ok := r.(error) if !ok { fmt.Printf("pkg: %v, error: %s", r, err) } } }() maxWait := time.Duration(5 * time.Second) session, sessionErr = mgo.DialWithTimeout("localhost:27017", maxWait) if sessionErr == nil { session.SetMode(mgo.Monotonic, true) coll = session.DB("MyDB").C("MyCollection") if coll != nil { fmt.Println("Got a collection object") return true } } else { // never gets here fmt.Println("Unable to connect to local mongo instance!") } return false }
元の問題コードは、遅延関数が実行される前に、パニックがプログラムを中断するというものです。これを修正するには、接続試行後に、defer ステートメント内で、recover() 関数を呼び出す必要があります。
変更されたコード:
var mongoUp bool func init() { if ( connectToMongo() ) { mongoUp := true fmt.Println("Connected") } else { mongoUp = false fmt.Println("Not Connected") } }
MongoDB が実行されている場合、プログラムは正常に接続します。そして、mongoUpをtrueに設定します。 MongoDB が実行されていない場合、プログラムは失敗をログに記録し、mongoUp を false に設定します。
このソリューションにより、プログラムは MongoDB 接続の失敗を適切に処理し、クラッシュすることなく実行を継続できます。
以上がMGO を使用して Go で MongoDB 接続障害から正常に回復する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。