问题描述
我有一个来自mongodb地图集的副本集,我可以用任何其他语言连接到这个副本集,以及常规的mongo客户端,并提供以下格式的url: mongodb的://用户:[email protected]:27017,prefix2.mongodb.net:27017,prefix3.mongodb.net:27017 /试验&安培; replicaSet = Cluster0-碎片-0安培; authSource =管理员
无论我尝试什么,添加ssl = true并删除,都无效。它总是无法访问服务器。
我尝试了每个组合的url,每个组合都用于dialConfig,还有Dial和DialWithConfig配置。
$ b
可能是什么原因?使用()以下代码段连接到,使用您的示例数据:
$ b $
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},
数据库:authDatabaseN ame,
用户名:user,
密码: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)
请注意,您也可以只指定其中一个副本集成员作为种子。例如:
Addrs:[] string {prefix2.mongodb.net:27017}
另见:
更新:
您也可以使用方法来解析MongoDB Atlas URI字符串。但是,目前此方法不支持SSL( )
解决方法是在解析之前取出 ssl = true
行。
// URI无ssl = true
var mongoURI =mongodb://用户名:密码@prefix1.mongodb.net,prefix2.mongodb .net,prefix3.mongodb.net / dbName?replicaSet = replName& authSource = admin
dialInfo,err:= mgo.ParseURL(mongoURI)
//下面的部分与上面类似。
tlsConfig =& tls.Config {}
dialInfo.DialServer = func(addr * mgo.ServerAddr)(net.Conn,error){
conn,err:= tls.Dial (tcp,addr.String(),tlsConfig)
返回conn,err
}
会话,_:= mgo.DialWithInfo(dialInfo)
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://user:[email protected]:27017,prefix2.mongodb.net:27017,prefix3.mongodb.net:27017/test?&replicaSet=Cluster0-shard-0&authSource=admin"
No matter what I tried, adding ssl=true and removing, nothing works. It is always "no reachable server".
I tried every single combination for url, every combination for dialConfig, and also Dial and DialWithConfig configurations.
What could be the reason ?
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:
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:[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)
这篇关于使用Golang连接到MongoDB Atlas mgo:永久不可访问服务器到副本集的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!