Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Pulih dengan Anggun daripada Kegagalan Sambungan MongoDB dalam Go dengan MGO?

Bagaimana untuk Pulih dengan Anggun daripada Kegagalan Sambungan MongoDB dalam Go dengan MGO?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-14 14:53:02769semak imbas

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

Memulihkan daripada Kegagalan Sambungan MongoDB dalam Go dengan MGO

Dalam Go, pakej MGO digunakan untuk berinteraksi dengan MongoDB. Walau bagaimanapun, penyambungan ke MongoDB kadangkala boleh gagal, menyebabkan panik dalam program. Artikel ini menyediakan penyelesaian untuk pulih dengan anggun daripada kegagalan sambungan sedemikian.

Fungsi berikut cuba menyambung ke MongoDB dan mengembalikan sesi dan koleksi jika berjaya:

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
}

Masalah dengan yang asal kod ialah panik mengganggu program sebelum fungsi tangguh dapat dilaksanakan. Untuk membetulkannya, fungsi recover() harus dipanggil di dalam pernyataan tangguh, selepas percubaan sambungan.

Kod yang diubah suai:

var mongoUp bool

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

Apabila MongoDB berjalan, program berjaya menyambung dan menetapkan mongoUp kepada benar. Apabila MongoDB tidak berjalan, atur cara merekodkan kegagalan dan menetapkan mongoUp kepada false.

Penyelesaian ini membolehkan atur cara mengendalikan kegagalan sambungan MongoDB dengan anggun dan meneruskan pelaksanaan tanpa ranap.

Atas ialah kandungan terperinci Bagaimana untuk Pulih dengan Anggun daripada Kegagalan Sambungan MongoDB dalam Go dengan MGO?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn