我正在尝试使用端口转发连接到远程mongodb服务器。在mgo.DialInfo中,拨号服务器将向中间主机返回连接(类型为*net.Conn
),Addrs
将是远程mongodb服务器地址(一组种子服务器)的字符串。我的问题是,如果我提供这些服务器的远程IP地址,该程序工作正常,我能够连接到远程mongodb服务器,但因为,IP地址可以更改我想给出服务器的域名,说 mongodbserver1 和 mongodbserver2 当我提供时,程序挂起。据我所知,该程序正在尝试解析本地计算机上的域名,这些域名无法正常工作,需要在中间主机上解析。我想知道如何做到这一点。
在代码方面,以下工作正常,
dialinfo := mgo.DialInfo{
Addrs: {"1.2.3.45","1.2.3.56"}
Database: Mongo1,
Username: User,
Password: Pwd,
Timeout: 60 * time.Second,
DialServer: func(addr *mgo.ServerAddr) (net.Conn, error) {
conn, err := connectToCluster("172.12.13.145")
if err != nil {
fmt.Println("couldn't connect to the cluster, trying again..")
return nil, err
}
remote, err := conn.Dial("tcp", addr.String())
if err != nil {
fmt.Println("couldn't connect to the mongodb server:", addr.String())
}
return remote, err
},
}
session, err = mgo.DialWithInfo(dialinfo)
但下面的那个不起作用
dialinfo := mgo.DialInfo{
Addrs: {"mongodbserver1","mongodbserver2"}
Database: Mongo1,
Username: User,
Password: Pwd,
Timeout: 60 * time.Second,
DialServer: func(addr *mgo.ServerAddr) (net.Conn, error) {
conn, err := connectToCluster("172.12.13.145")
if err != nil {
fmt.Println("couldn't connect to the cluster, trying again..")
return nil, err
}
remote, err := conn.Dial("tcp", addr.String())
if err != nil {
fmt.Println("couldn't connect to the mongodb server:", addr.String())
}
return remote, err
},
}
session, err = mgo.DialWithInfo(dialinfo)
答案 0 :(得分:-1)
配置名称解析以在您的计算机上运行。这可能意味着将测试条目添加到/etc/hosts
(如果您使用的是* nix)。或者,您可以将生产DNS服务器的条目添加到/etc/resolv.conf
(同样,假设为* nix)。