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
Mary-Kate Olsenoriginal
2024-11-14 14:53:02771parcourir

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
}

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")
    }
}

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!

Déclaration:
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