Heim > Backend-Entwicklung > Golang > Wie kann man MongoDB-Verbindungsfehler in Go mit MGO ordnungsgemäß wiederherstellen?

Wie kann man MongoDB-Verbindungsfehler in Go mit MGO ordnungsgemäß wiederherstellen?

Mary-Kate Olsen
Freigeben: 2024-11-14 14:53:02
Original
769 Leute haben es durchsucht

How to Gracefully Recover from MongoDB Connection Failures in Go with MGO?

Wiederherstellung nach einem MongoDB-Verbindungsfehler in Go mit MGO

In Go wird das MGO-Paket für die Interaktion mit MongoDB verwendet. Allerdings kann die Verbindung zu MongoDB manchmal fehlschlagen, was zu einer Panik im Programm führt. Dieser Artikel bietet eine Lösung für die ordnungsgemäße Wiederherstellung nach solchen Verbindungsfehlern.

Die folgende Funktion versucht, eine Verbindung zu MongoDB herzustellen und bei Erfolg eine Sitzung und Sammlung zurückzugeben:

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
}
Nach dem Login kopieren

Das Problem mit dem Original Code besteht darin, dass die Panik das Programm unterbricht, bevor die Verzögerungsfunktion ausgeführt werden kann. Um dies zu beheben, sollte die Funktion „recover()“ innerhalb der Defer-Anweisung nach dem Verbindungsversuch aufgerufen werden.

Der geänderte Code:

var mongoUp bool

func init() {
    if ( connectToMongo() ) {
        mongoUp := true
        fmt.Println("Connected")
    } else {
        mongoUp = false
        fmt.Println("Not Connected")
    }
}
Nach dem Login kopieren

Wenn MongoDB ausgeführt wird, stellt das Programm erfolgreich eine Verbindung her und setzt mongoUp auf true. Wenn MongoDB nicht ausgeführt wird, protokolliert das Programm den Fehler und setzt mongoUp auf „false“.

Diese Lösung ermöglicht es dem Programm, MongoDB-Verbindungsfehler ordnungsgemäß zu verarbeiten und die Ausführung ohne Absturz fortzusetzen.

Das obige ist der detaillierte Inhalt vonWie kann man MongoDB-Verbindungsfehler in Go mit MGO ordnungsgemäß wiederherstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage