2016-12-15 8 views
3

Ich habe eine Replik-Set von Mongodb Atlas, die ich mit jeder anderen Sprache verbinden kann, und regulären Mongo-Client, mit der URL im Format:Verbinden mit MongoDB Atlas mit Golang Mgo: Persistent nicht erreichbar Server zu Replikat gesetzt

„mongodb: // user: [email protected]: 27017, prefix2.mongodb.net: 27017, prefix3.mongodb.net: 27017/test & replicaSet = Cluster0-Shard-0 & authSource = admin "

Egal was ich versuchte, ssl = wahr und entfernen, nichts funktioniert. Es ist immer "kein erreichbarer Server".

Ich habe versucht jede einzelne Kombination für URL, jede Kombination für DialConfig, und auch Dial und DialWithConfig Konfigurationen.

Was könnte der Grund sein?

+0

Irgendwelche Updates zu diesem Thema? – Marcel

Antwort

6

Mit MongoDB Go Driver (mgo) Codeausschnitt unten an MongoDB Atlas Arbeiten verbinden, indem Sie Ihre Beispieldaten:

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) 

Beachten Sie, dass auch nur eine der Replikat-Gruppe Mitglieder als Keim angeben können. Zum Beispiel:

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

Siehe auch:

aktualisieren:

Sie können auch die Methode ParseURL() verwenden, um die MongoDB Atlas-URI-Zeichenfolge zu analysieren. Zur Zeit unterstützt diese Methode jedoch kein SSL (mgo.V2 PR:304)

Eine Umgehung ist, die Zeile ssl=true vor dem Analysieren herauszunehmen.

//URI without ssl=true 
var mongoURI = "mongodb://username:[email protected],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

Wären Sie in der Lage, zu beraten, wie die Verbindungszeichenfolge aussehen würde, wenn 'dialInfo' auf diese Weise generiert würde? 'dialInfo, err: = mgo.ParseURL (URL)'. Geschätzt. – Marcel

+1

@Marcel Siehe aktualisierte Antwort. –

Verwandte Themen