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

Mongodb CreateSession:没有可访问的服务器-mgo,mongodb,google-app-engine,go,mgo,Mongodb,Google App Engine,Go,Mgo,我正在尝试使用mgo连接MongoDB Atlas免费集群 戈朗代码- package main import ( "fmt" "gopkg.in/mgo.v2" "time" "log" ) const ( AuthDatabase = "mydatabase" AuthUserName = "databaseadmin" AuthPassword = "databasepassword" ReplicaSetName

我正在尝试使用mgo连接MongoDB Atlas免费集群

戈朗代码-

package main

import (
     "fmt"
     "gopkg.in/mgo.v2"
     "time"
     "log"
)

const (
    AuthDatabase = "mydatabase"
    AuthUserName = "databaseadmin"
    AuthPassword = "databasepassword"
    ReplicaSetName = "myproject-shard-0"
)

func main(){

MongoDBHosts := []string{
    "myproject-shard-00-00-w4vds.mongodb.net:27017",
    "myproject-shard-00-01-w4vds.mongodb.net:27017",
    "myproject-shard-00-02-w4vds.mongodb.net:27017",
}

mongoDBDialInfo := &mgo.DialInfo{
    Addrs:    MongoDBHosts,
    Timeout:  60 * time.Second,
    Database: AuthDatabase,
    Username: AuthUserName,
    Password: AuthPassword,
    ReplicaSetName: ReplicaSetName,
}

mongoSession, err := mgo.DialWithInfo(mongoDBDialInfo)
if err != nil {
    log.Fatalf("CreateSession: %s\n", err)
}

defer  mongoSession.Close()
fmt.Printf("Connected to replica set %v!\n", mongoSession.LiveServers())
}
错误消息-

package main

import (
     "fmt"
     "gopkg.in/mgo.v2"
     "time"
     "log"
)

const (
    AuthDatabase = "mydatabase"
    AuthUserName = "databaseadmin"
    AuthPassword = "databasepassword"
    ReplicaSetName = "myproject-shard-0"
)

func main(){

MongoDBHosts := []string{
    "myproject-shard-00-00-w4vds.mongodb.net:27017",
    "myproject-shard-00-01-w4vds.mongodb.net:27017",
    "myproject-shard-00-02-w4vds.mongodb.net:27017",
}

mongoDBDialInfo := &mgo.DialInfo{
    Addrs:    MongoDBHosts,
    Timeout:  60 * time.Second,
    Database: AuthDatabase,
    Username: AuthUserName,
    Password: AuthPassword,
    ReplicaSetName: ReplicaSetName,
}

mongoSession, err := mgo.DialWithInfo(mongoDBDialInfo)
if err != nil {
    log.Fatalf("CreateSession: %s\n", err)
}

defer  mongoSession.Close()
fmt.Printf("Connected to replica set %v!\n", mongoSession.LiveServers())
}
CreateSession:没有可访问的服务器

环境


我正在使用mongodb免费集群和Google App Engine GO SDK连接到mongodb Atlas,您需要SSL

先决条件

TLS/SSL

    Clients must have support for TLS/SSL to connect to an Atlas cluster.

    Clients must have support for the SNI TLS extension to connect to an Atlas M0 Free Tier cluster.


Whitelist

    To access a cluster, you must connect from an IP address on the Atlas group’s IP whitelist. If you need to add an IP address to the whitelist, you can do so in the Connect dialog. You can also add the IP address from the Security tab.
因此,我不得不更改下面的代码

mongoDBDialInfo := &mgo.DialInfo{
    Addrs:    MongoDBHosts,
    Timeout:  60 * time.Second,
    Database: AuthDatabase,
    Username: AuthUserName,
    Password: AuthPassword,
    ReplicaSetName: ReplicaSetName,
}

mongoDBDialInfo.DialServer = func(addr *mgo.ServerAddr) (net.Conn, error) {
        conn, err := tls.Dial("tcp", addr.String(), tlsConfig)
        return conn, err
    }
我也必须导入以下内容

"crypto/tls" 
"net"