Heim >Backend-Entwicklung >Golang >Wie kann man mit MGO die Panik „Keine erreichbare Server' in Golang verhindern?

Wie kann man mit MGO die Panik „Keine erreichbare Server' in Golang verhindern?

Susan Sarandon
Susan SarandonOriginal
2024-11-28 15:08:111014Durchsuche

How to Prevent

Panikwiederherstellung in Golang mit MGO: Verhinderung der „Keine erreichbaren Server“-Panik

Beim Herstellen einer Verbindung zu einer MongoDB-Instanz über die MGO-Bibliothek in Go , kann es zu einer „Keine erreichbaren Server“-Panik kommen, wenn die Instanz nicht verfügbar oder offline ist. Dies kann zu einem unerwarteten Programmabbruch führen.

Um dieses Problem zu verhindern, können wir einen Wiederherstellungsmechanismus mithilfe der Verzögerungs- und Wiederherstellungsfunktionen in Go implementieren. Die in der Frage bereitgestellte Lösung funktioniert jedoch nicht effektiv.

Geänderter Code:

Unten finden Sie eine modifizierte Version des angegebenen Codes, der die Panik erfolgreich behebt und Ermöglicht dem Programm, die Ausführung fortzusetzen:

package main

import (
    "fmt"
    "time"
)

import (
    "labix.org/v2/mgo"
)

func connectToMongo() bool {
    fmt.Println("enter main - connecting to mongo")
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Unable to connect to MongoDB. Received panic:", r)
        }
    }()

    maxWait := time.Duration(5 * time.Second)
    session, err := mgo.DialWithTimeout("localhost:27017", maxWait)
    if err != nil {
        return false
    }

    session.SetMode(mgo.Monotonic, true)
    coll := session.DB("MyDB").C("MyCollection")

    if coll != nil {
        fmt.Println("Got a collection object")
        return true
    }

    fmt.Println("Unable to retrieve collection")
    return false
}

func main() {
    if connectToMongo() {
        fmt.Println("Connected")
    } else {
        fmt.Println("Not Connected")
    }
}

In diesem Code verwenden wir eine Verzögerungsfunktion, um die durch den DialWithTimeout-Aufruf verursachte Panik abzufangen. Wenn eine Panik auftritt, geben wir eine Fehlermeldung aus und setzen die Ausführung des Programms fort, um zu verhindern, dass es vorzeitig beendet wird.

Ausgabe mit MongoDB Down:

Wenn MongoDB Down ist, Das Programm erzeugt die folgende Ausgabe:

enter main - connecting to mongo
Unable to connect to MongoDB. Received panic: no reachable servers
Not Connected

Ausgabe mit MongoDB Aktiv:

Wenn MongoDB aktiv ist, erzeugt das Programm die folgende Ausgabe:

enter main - connecting to mongo
Got a collection object
Connected

Indem wir die Panik abfangen und eine informative Fehlermeldung bereitstellen, können wir sicherstellen, dass das Programm fortgesetzt wird ausgeführt werden und kann vorübergehende Netzwerkprobleme oder MongoDB-Ausfälle problemlos bewältigen.

Das obige ist der detaillierte Inhalt vonWie kann man mit MGO die Panik „Keine erreichbare Server' in Golang verhindern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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