来自MongoClientURI文档:
Represents a URI which can be used to create a MongoClient instance. The URI describes the hosts to be used and options. The format of the URI is:
mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database[.collection]][?options]]
-
host1 is the only required part of the URI. It identifies a server address to connect to.
-
Replica set configuration:
replicaSet=name: Implies that the hosts given are a seed list, and the driver will attempt to find all members of the set.
我想知道,在不指定replicaSet的情况下传递多个主机有什么意义吗? 如果我传递所有节点主机但忘记指定replicaSet,Mongo客户端会发现副本集吗?
最佳答案
传递副本集成员(但不是集合的所有成员)的“种子列表”本质上可以说是相同的。驱动程序本质上将“查询”第一个可用成员,以确定有关副本集的信息。
这允许诸如第一个成员甚至所提到的成员中没有一个实际上是当前 PRIMARY 的情况。然后返回的信息告诉驱动程序所有成员是什么,当然还有哪一个当前是 PRIMARY,因为至少写入时总是需要这一点。
这里的另一种情况当然是分片集群有多个“路由器”或“mongos”实例。在主机列表中指定多个主机将导致在连接时选择其中一个主机作为连接点。如果该连接出现错误,并且您正在处理此错误,则后续尝试将选择“第一个可用”主机并将其用于连接。
这几乎涵盖了 URI 连接中可以有多个主机的各种情况。
关于java - 如果从包含多个主机但不是副本集选项的 URI 创建 MongoClientURI 会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25156583/