Maison > développement back-end > Golang > Comment récupérer gracieusement des échecs de connexion MongoDB dans Go avec MGO ?

Comment récupérer gracieusement des échecs de connexion MongoDB dans Go avec MGO ?

Mary-Kate Olsen
Libérer: 2024-11-14 14:53:02
original
757 Les gens l'ont consulté

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

Récupération après un échec de connexion MongoDB dans Go avec MGO

Dans Go, le package MGO est utilisé pour interagir avec MongoDB. Cependant, la connexion à MongoDB peut parfois échouer, provoquant une panique dans le programme. Cet article fournit une solution pour récupérer gracieusement de tels échecs de connexion.

La fonction suivante tente de se connecter à MongoDB et renvoie une session et une collection en cas de succès :

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
}
Copier après la connexion

Le problème avec l'original Le code est que la panique interrompt le programme avant que la fonction de report puisse s'exécuter. Pour résoudre ce problème, la fonction recovery() doit être appelée dans l'instruction defer, après la tentative de connexion.

Le code modifié :

var mongoUp bool

func init() {
    if ( connectToMongo() ) {
        mongoUp := true
        fmt.Println("Connected")
    } else {
        mongoUp = false
        fmt.Println("Not Connected")
    }
}
Copier après la connexion

Lorsque MongoDB est en cours d'exécution, le programme se connecte avec succès et définit mongoUp sur true. Lorsque MongoDB n'est pas en cours d'exécution, le programme enregistre l'échec et définit mongoUp sur false.

Cette solution permet au programme de gérer gracieusement les échecs de connexion MongoDB et de poursuivre l'exécution sans planter.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal