我正在尝试使用端口转发连接到远程mongodb服务器。 在mgo.DialInfo中,拨号服务器将返回到中介主机的连接(类型为*net.Conn ),而Addrs将是一串远程mongodb服务器的地址(一组种子服务器)。 我的问题是,如果我提供这些服务器的远程IP地址,则程序可以正常运行,并且能够连接到远程mongodb服务器,但是由于IP地址可以更改,因此我想提供服务器的域名,例如mongodbserver1mongodbserver2 ,当我给它时,程序挂起。 据我了解,该程序正在尝试解析本地计算机上无法使用的域名,因此需要在中间主机上进行解析。 我想知道我该怎么做。

就代码而言,以下工作正常,

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)

#1楼 票数:-1

配置名称解析以在您的计算机上工作。 这可能意味着将测试条目添加到/etc/hosts (如果使用* nix)。 或者,您可以将生产DNS服务器的条目添加到/etc/resolv.conf (同样,假设* nix)。

  ask by user1851006 translate from so

未解决问题?本站智能推荐:

1回复

由mgo调用mongo独立kubernetes服务时出现“无法访问的服务器”错误

我想创建一个提供mongo服务的Pod。 这是我的mongodb pod配置: 它已成功部署,也可以通过bash命令登录该特定容器,以创建我自己的数据库和集合。 到目前为止,一切都还好。 但是,每当我想在另一个Pod中连接该mongodb服务时,我都会遇到错误。 这是我的
1回复

CreateSession:没有可访问的服务器-mgo

我正在尝试使用mgo连接到MongoDB Atlas免费集群。 Golang代码- 错误信息 - CreateSession:没有可访问的服务器 环境 我将mongodb free cluster与Google App Engine GO SDK结合使用
1回复

Golang / MGO —恐慌:没有可访问的服务器

我具有连接到Mongo的以下功能。 为了进行测试,我关闭了mongod,并希望允许该程序在w / 0 mongo不可用的情况下继续运行。 如果无法连接服务器,MGO似乎会引发紧急情况,因此我在下面编写了一个延迟/恢复操作,但是紧急情况仍然导致程序退出。 从中恢复的正确方法是什么?
1回复

多个应用服务器上的MongoDB连接失败

我们有mongodb和gogo的mgo驱动程序。 除应用程序(golang二进制文件)之外,还有两个连接到mongodb的应用程序服务器。 Mongodb作为副本集运行,每个服务器根据副本的当前状态连接两个主服务器或辅助服务器。 我们遇到了SocketException handlin
1回复

在Java中使用JSch转发端口时,“本地端口...无法绑定”

我需要通过SSH隧道连接到MongoDB,并且JSch端口转发会抛出错误: 本地端口127.0.0.1:27017无法绑定 我将通过SSH隧道连接到MongoDB。 我在stackoverflow上找到了代码,它解决了我的问题。 但几周后,相同的代码停止工作。 我无法确定
2回复

mgo go 服务器中打开的文件太多

我在日志中收到这些错误: 接受错误:接受 tcp [::]:80: accept4: too many open files; 对于 ubuntu 上的 mongodb 服务器,使用 mgo 用 go 编写。 它们在运行大约一天后开始出现。 代码: 里面有什么需要关闭的吗? 或者它在
2回复

如何通过MongoDB同步在两个不同服务器上运行的两个应用程序

我正在golang中开发一个Web应用程序,并使用单个MongoDB实例作为数据存储。 我有应该独占执行的代码。 由于我的Web应用程序在两个不同的服务器上运行,我无法使用golang同步工具。 想法是通过锁定文件来使用MongoDB,但我不知道它是否可能,如果是,那该怎么做?
1回复

使用 Golang mgo 连接到 MongoDB Atlas:持久性没有可访问的服务器到副本集

我有一个来自 MongoDB 地图集的副本集,我可以连接到任何其他语言和常规 mongo 客户端,其 URL 格式为: mongodb://user:pass@prefix1.mongodb.net:27017,prefix2.mongodb.net:27017,prefix3.mongodb.n