Connecting to MongoDB Atlas using Golang mgo: Persistent no reachable server to replica set

前端 未结 1 1541
轻奢々
轻奢々 2020-12-15 09:06

I have a replica set from mongodb atlas, to which I can connect with ANY other language, and regular mongo client, with the url provided with the format :

\"mongodb:

相关标签:
1条回答
  • 2020-12-15 09:51

    Using MongoDB Go driver mgo code snippet below to connect to MongoDB Atlas works, using your example data:

    import (
        "gopkg.in/mgo.v2"
        "crypto/tls"
        "net"
    )
    
    tlsConfig := &tls.Config{}
    
    dialInfo := &mgo.DialInfo{
        Addrs: []string{"prefix1.mongodb.net:27017", 
                        "prefix2.mongodb.net:27017",
                        "prefix3.mongodb.net:27017"},
        Database: "authDatabaseName",
        Username: "user",
        Password: "pass",
    }
    dialInfo.DialServer = func(addr *mgo.ServerAddr) (net.Conn, error) {
        conn, err := tls.Dial("tcp", addr.String(), tlsConfig)
        return conn, err
    }
    session, err := mgo.DialWithInfo(dialInfo)
    

    Note that you can also specify only one of the replica set members as a seed. For example:

    Addrs: []string{"prefix2.mongodb.net:27017"}
    

    See also:

    • tls.Dial()
    • DialInfo
    • DialWithInfo

    Update:

    You could also use ParseURL() method to parse MongoDB Atlas URI string. However, currently this method does not support SSL (mgo.V2 PR:304)

    A work around is to take out the ssl=true line before parsing.

    //URI without ssl=true
    var mongoURI = "mongodb://username:password@prefix1.mongodb.net,prefix2.mongodb.net,prefix3.mongodb.net/dbName?replicaSet=replName&authSource=admin"
    
    dialInfo, err := mgo.ParseURL(mongoURI)
    
    //Below part is similar to above. 
    tlsConfig := &tls.Config{}
    dialInfo.DialServer = func(addr *mgo.ServerAddr) (net.Conn, error) {
        conn, err := tls.Dial("tcp", addr.String(), tlsConfig)
        return conn, err
    }
    session, _ := mgo.DialWithInfo(dialInfo)
    
    0 讨论(0)
提交回复
热议问题