>  기사  >  백엔드 개발  >  MGO를 사용하여 Go에서 MongoDB 연결 실패를 정상적으로 복구하는 방법은 무엇입니까?

MGO를 사용하여 Go에서 MongoDB 연결 실패를 정상적으로 복구하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-14 14:53:02706검색

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

MGO를 사용하여 Go에서 MongoDB 연결 실패 복구

Go에서는 MGO 패키지를 사용하여 MongoDB와 상호작용합니다. 그러나 MongoDB 연결이 때때로 실패하여 프로그램에 패닉이 발생할 수 있습니다. 이 기사에서는 이러한 연결 실패를 정상적으로 복구할 수 있는 솔루션을 제공합니다.

다음 함수는 MongoDB에 연결을 시도하고 성공하면 세션과 컬렉션을 반환합니다.

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
}

원본의 문제 코드는 defer 함수가 실행되기 전에 프로그램을 패닉 인터럽트로 만드는 것입니다. 이 문제를 해결하려면 연결 시도 후 defer 문 내에서 복구() 함수를 호출해야 합니다.

수정된 코드:

var mongoUp bool

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

MongoDB가 실행되면 프로그램이 성공적으로 연결됩니다. mongoUp을 true로 설정합니다. MongoDB가 실행되지 않을 때 프로그램은 실패를 기록하고 mongoUp을 false로 설정합니다.

이 솔루션을 사용하면 프로그램이 MongoDB 연결 실패를 적절하게 처리하고 충돌 없이 실행을 계속할 수 있습니다.

위 내용은 MGO를 사용하여 Go에서 MongoDB 연결 실패를 정상적으로 복구하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.