Должен ли я по-прежнему указывать репликационный набор Mon go в строке подключения? - PullRequest
1 голос
/ 25 января 2020

Я использую Mon go с C# mon go драйвером (2.10) .

Мне удалось подключиться к нему через набор реплик через:

var dbClient = new MongoClient(
"mongodb://aaa:123@m.com:27017,m1.com:37017,m2.com:47017/dbtest?safe=true&connect=replicaset");

Но тогда Я прочитал, что мне не нужно указывать connect=replicaset, потому что у меня несколько хостов.
Что противоположно что было предложено здесь .

Так что теперь мое соединение:

"mongodb://aaa:123@m.com:27017,m1.com:37017,m2.com:47017/dbtest?safe=true"

- это работает.

Но затем я читаю документы также здесь ), и есть переключатель no connect=replicaset в все.

Все, что есть: replicaset=name переключатель.

Вопрос:

Как правильно объявить строку подключения (быть используется с MongoClient C#), который использует набор реплик?

1 Ответ

1 голос
/ 25 января 2020

Лоты изменились с течением времени с драйвером MongoDB C#. Ваше решение должно основываться на используемой вами версии.

Первая ссылка , написанная в 2014 году для perl драйвера

SO link написано в 2015 году (когда использовалась версия 2.2). Нет ссылки на connect = replicaset ни в одной из различных версий документации

Документация Это то, что я бы рекомендовал использовать, поскольку оно написано Mon go. Следуя указаниям в этой документации, я смог использовать настройки MongoClient и MongoClient (примеры приведены ниже).

Пример

Вы можете написать свой mongodb в длинном строка, подобная приведенной выше:

"mongodb://aaa:123@m.com:27017,m1.com:37017,m2.com:27017/dbtest?replicaSet=myRepl"

Рекомендация

Вместо использования строки подключения, как указано выше, я бы рекомендовал использовать собственные переменные C# для подключения к набор реплик. ConnectionMode указывает в настройке, является ли это ReplicaSet или Direct.

    var mongoClientSettings = new MongoClientSettings()
    {
        ConnectionMode = ConnectionMode.ReplicaSet,
        Credential = MongoCredential.CreateCredential("admin", "user", "pass"),
        ReplicaSetName = "ReplicaSetName",
        Servers = new List<MongoServerAddress>() { new MongoServerAddress("host", 27017), new MongoServerAddress("host2", 27017) }.ToArray(),
        ApplicationName = "NameOfYourApplicatino",
    };

    MongoClient client = new MongoClient(mongoClientSettings);

Поскольку клиент является потокобезопасным, вы также можете использовать его в качестве глобальной переменной.

...