2016-12-15 9 views
3

У меня есть набор реплик из атласа mongodb, к которому я могу подключиться с любым другим языком и обычным клиентом mongo, с URL-адресом, предоставленным в формате:Подключение к MongoDB Atlas с использованием Golang mgo: Постоянный недоступный сервер для набора реплик

«MongoDB: // пользователь: [email protected]: 27017, prefix2.mongodb.net: 27017, prefix3.mongodb.net: 27017/тест & replicaSet = Cluster0-осколок-0 & = авторизация источник admin "

Независимо от того, что я пробовал, добавляя ssl = true и удаляя, ничего не работает. Это всегда «недоступный сервер».

Я пробовал каждую комбинацию для url, каждой комбинации для dialConfig, а также конфигурации Dial и DialWithConfig.

В чем может быть причина?

+0

Любые обновления по этому вопросу? – Marcel

ответ

6

Использование MongoDB Go Driver (mgo) фрагмент кода ниже, чтобы подключиться к MongoDB Atlas работ, используя ваш пример данных:

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) 

Обратите внимание, что вы можете также указать только один из участников репликации в качестве затравки. Например:

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

Смотрите также:

Update:

Вы также можете использовать метод ParseURL() для анализа строки URI MongoDB Atlas. Тем не менее, в настоящее время этот метод не поддерживает SSL (mgo.V2 PR:304)

Перед разборкой необходимо выполнить линию ssl=true.

//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

Могли бы вы посоветовать, как будет выглядеть строка соединения, если вместо этого был создан 'dialInfo'? 'dialInfo, err: = mgo.ParseURL (url)'. Оценил. – Marcel

+1

@Marcel См. Обновленный ответ. –

 Смежные вопросы

  • Нет связанных вопросов^_^