如何使用mongodb java驱动程序3.0.0从辅助服务器获取配置文件状态?
我无法获取辅助(s132)的配置文件状态,因为驱动程序正在循环并最终超时:如何使用mongodb java驱动程序3.0.0从辅助服务器获取配置文件状态?,java,mongodb,Java,Mongodb,我无法获取辅助(s132)的配置文件状态,因为驱动程序正在循环并最终超时: 2015-05-05 17:59:55,829 [main] INFO org.mongodb.driver.cluster - No server chosen by PrimaryServerSelector from cluster description ClusterDescription{type=REPLICA_SET, connectionMode=SINGLE, all=[ServerDescript
2015-05-05 17:59:55,829 [main] INFO org.mongodb.driver.cluster - No server chosen by PrimaryServerSelector from cluster description ClusterDescription{type=REPLICA_SET, connectionMode=SINGLE, all=[ServerDescription{address=s132:27017, type=REPLICA_SET_SECONDARY, state=CONNECTED, ok=true, version=ServerVersion{versionList=[2, 6, 4]}, minWireVersion=0, maxWireVersion=2, maxDocumentSize=16777216, roundTripTimeNanos=8836176, setName='offerStoreDE3', hosts=[s132:27017, s124:27017], passives=[], arbiters=[], primary='s124:27017', tagSet=TagSet{[]}}]}. Waiting for 30000 ms before timing out
2015-05-05 17:59:56,315 [cluster-ClusterId{value='5548e8fbf03cf20477e864a9', description='null'}-s132:27017] DEBUG org.mongodb.driver.cluster - Checking status of s132:27017
2015-05-05 17:59:56,324 [cluster-ClusterId{value='5548e8fbf03cf20477e864a9', description='null'}-s132:27017] DEBUG org.mongodb.driver.cluster - Updating cluster description to {type=REPLICA_SET, servers=[{address=s132:27017, type=REPLICA_SET_SECONDARY, roundTripTime=8,8 ms, state=CONNECTED}]
2015-05-05 17:59:56,824 [cluster-ClusterId{value='5548e8fbf03cf20477e864a9', description='null'}-s132:27017] DEBUG org.mongodb.driver.cluster - Checking status of s132:27017
2015-05-05 17:59:56,834 [cluster-ClusterId{value='5548e8fbf03cf20477e864a9', description='null'}-s132:27017] DEBUG org.mongodb.driver.cluster - Updating cluster description to {type=REPLICA_SET, servers=[{address=s132:27017, type=REPLICA_SET_SECONDARY, roundTripTime=8,9 ms, state=CONNECTED}]
2015-05-05 17:59:57,333 [cluster-ClusterId{value='5548e8fbf03cf20477e864a9', description='null'}-s132:27017] DEBUG org.mongodb.driver.cluster - Checking status of s132:27017
2015-05-05 17:59:57,343 [cluster-ClusterId{value='5548e8fbf03cf20477e864a9', description='null'}-s132:27017] DEBUG org.mongodb.driver.cluster - Updating cluster description to {type=REPLICA_SET, servers=[{address=s132:27017, type=REPLICA_SET_SECONDARY, roundTripTime=8,8 ms, state=CONNECTED}]
2015-05-05 17:59:57,842 [cluster-ClusterId{value='5548e8fbf03cf20477e864a9', description='null'}-s132:27017] DEBUG org.mongodb.driver.cluster - Checking status of s132:27017
但是,询问主设备(s124)的配置文件状态可以正常工作
我的java代码如下所示:
MongoClientOptions options = MongoClientOptions.builder().
connectTimeout(2000).
socketTimeout(10000).
readPreference(ReadPreference.secondaryPreferred()).
build();
MongoCredential mc = MongoCredential.createCredential("user", "db", "XXXX".toCharArray());
MongoClient mongo = new MongoClient(new ServerAddress("s132:27017"), Lists.newArrayList(mc), options);
MongoDatabase myDB = mongo.getDatabase("myDB");
BsonDocument bd = BsonDocument.parse("{profile:1}");
Bson bson = (Bson)bd;
Document doc = myDB.runCommand(bson); //loops until timeout
Object obj = doc.get("slowms");
在mongo shell中,我可以毫无问题地执行相同的操作:
offerStoreDE3:SECONDARY> db.runCommand({profile:1})
{ "was" : 0, "slowms" : 100, "ok" : 1 }
replSet的状态如下所示:
offerStoreDE3:SECONDARY> rs.status()
{
"set" : "offerStoreDE3",
"date" : ISODate("2015-05-05T16:09:47Z"),
"myState" : 2,
"syncingTo" : "s124:27017",
"members" : [
{
"_id" : 7,
"name" : "s124:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 1400,
"optime" : Timestamp(1430740008, 1),
"optimeDate" : ISODate("2015-05-04T11:46:48Z"),
"lastHeartbeat" : ISODate("2015-05-05T16:09:45Z"),
"lastHeartbeatRecv" : ISODate("2015-05-05T16:09:47Z"),
"pingMs" : 0,
"electionTime" : Timestamp(1430840794, 1),
"electionDate" : ISODate("2015-05-05T15:46:34Z")
},
{
"_id" : 8,
"name" : "s132:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 1740,
"optime" : Timestamp(1430740008, 1),
"optimeDate" : ISODate("2015-05-04T11:46:48Z"),
"self" : true
}
],
"ok" : 1
}
run命令(bson)代码>将始终将命令定向到主节点,因为它在下面执行写入命令
对于显式读取,命令必须提供读取首选项,例如:
Document doc=myDB.runCommand(bson,ReadPreference.secondaryPreferred())代码>我刚刚打开了一个bug报告:这个问题强调了API文档需要澄清。我计划作为JAVA-1801Hanks-Ross的一部分来做,但是MongoClient已经传递了ReadPreference.secondaryPreferred()。这被忽略了吗?无论如何,你的建议是有效的,所以我对你的答案投了赞成票。