我在连接到远程环境中的副本集的java驱动程序中遇到了令人讨厌的问题。
我使用以下代码通过Mongo DB Java Async API 3.2.2连接到服务器。
MongoClient mongoClusterClient = MongoClients.create(MongoClientSettings.builder()
.clusterSettings(ClusterSettings.builder()
.applyConnectionString(hrvuConnectionString)
.serverSelectionTimeout(120, TimeUnit.SECONDS)
.build())
.connectionPoolSettings(ConnectionPoolSettings.builder()
.applyConnectionString(hrvuConnectionString)
.build())
.serverSettings(ServerSettings.builder().build())
.credentialList(getMongoConnectionString().getCredentialList())
.sslSettings(SslSettings.builder()
.applyConnectionString(hrvuConnectionString)
.build())
.socketSettings(SocketSettings.builder()
.applyConnectionString(hrvuConnectionString)
.build())
.build());
return mongoClusterClient;
我的连接字符串采用以下格式。
mongodb://node-a.singlenode-mongodb.qa.shared.eu.qa.aws.app.io:27017,node-b.singlenode-mongodb.qa.shared.eu.qa.aws.app.io:27017,node-c.singlenode-mongodb.qa.shared.eu.qa.aws.app.io:27017/?replicaSet=rst-app-shared-qa&w=0&readPreference=secondaryPreferred&maxPoolSize=30&minpoolsize=5&maxidletimems=60000
我尝试在客户端创建中使用不同的选项(提供主机而不是ClusterSettings的连接字符串)但总是遇到以下问题:
2016-07-14 06:54:28.797 [I] [ ] [org.mongodb.driver.cluster] | No server chosen by WritableServerSelector from cluster description ClusterDescription{type=UNKNOWN, connectionMode=MULTIPLE, all=[ServerDescription{address=node-a.singlenode-mongodb.qa.shared.eu.qa.aws.app.io:27017, type=UNKNOWN, state=CONNECTING}, ServerDescription{address=node-b.singlenode-mongodb.qa.shared.eu.qa.aws.app.io:27017, type=UNKNOWN, state=CONNECTING}, ServerDescription{address=node-c.singlenode-mongodb.qa.shared.eu.qa.aws.app.io:27017, type=UNKNOWN, state=CONNECTING}]}. Waiting for 30000 ms before timing out
更有趣的是报告此后,应用程序正在独立获取连接。在我的本地环境中安装的单个数据库服务器没有问题。应用程序在本地设置中按预期运行。
我看到它需要获取db写入的主节点(在这种情况下为node-a.singlenode-mongodb.qa.shared.eu.qa.aws.app.io)。
有没有办法在连接时告诉驱动程序主节点?我在最近3天内遇到此错误,我们非常感谢您的帮助。
谢谢你, 钱德拉。