【问题标题】:Getting "not talking to master and retries used up" Exception at DBCursor.hasNext()在 DBCursor.hasNext() 处获得“不与主人交谈并重试”异常
【发布时间】:2020-04-08 11:09:21
【问题描述】:

我在语句 DBCursor.hasNext() 处收到“不与主服务器对话并重试用完”异常。

当我搜索时,得到了设置首选项的解决方案。我仍然遇到问题。

我的代码如下:

public void sampleTest() throws Exception
    {   

MongoClient client = new MongoClient("192.168.20.117", 27017);

DB database = client.getDB("CLME2ECORE");

boolean auth = database.authenticate("tecnotree", ("tecnotree").toCharArray());


DBCollection collection = database.getCollection("RegistrationRequest");

collection.setReadPreference(ReadPreference.primary());

BasicDBObject andQuery = new BasicDBObject("serviceRequest.serviceRequestSubtype.masterCode","RETPOSTREG");
andQuery.append("serviceRequest.serviceRequestStatus.masterCode", "PYMTPEND");

BasicDBObject andFields = new BasicDBObject("serviceRequest.customer.profileDetails.basicDetails.customerCode",1);
andFields.append("_id", 0);

DBCursor dbCursor = collection.find(andQuery);
DBObject dbObject;

dbCursor.setReadPreference(ReadPreference.primary());

if(dbCursor.hasNext())
{
     dbObject = dbCursor.next();

     String value = dbObject.get("serviceRequest.customer.profileDetails.basicDetails.customerCode").toString();
}



client.close();

}

我使用maven依赖作为

<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongo-java-driver</artifactId>
    <version>2.13.0</version>
</dependency>
<dependency>
 <groupId>org.mongodb</groupId>
 <artifactId>bson</artifactId>
 <version>2.13.0</version>
</dependency> 

请帮助解决这个问题。

【问题讨论】:

标签: java mongodb


【解决方案1】:

进行这些更改,然后它就会起作用。

  1. 在连接 mongodb 时传递完整的副本集字符串,不要传递单个服务器 IP。

  2. 将 readPreference 更改为 PrimaryPreferred,而不是 Primary。

【讨论】:

    【解决方案2】:

    我遇到了和你一模一样的问题。我正在使用 java spring 连接到从属 mongo 数据库。下面的代码应该会有所帮助。

    @Configuration
    @PropertySource("classpath:param.properties")
    public class MongoConfig {
    
        public @Bean MongoClientFactoryBean mongo() {
    
            MongoClientFactoryBean mongo = new MongoClientFactoryBean();
            mongo.setHost(mongoAddress);
            mongo.setPort(mongoPort);
            MongoClientOptions mco = new MongoClientOptions.Builder().readPreference(ReadPreference.secondaryPreferred()).build();
    
            mongo.setMongoClientOptions(mco);
            return mongo;
        }
    
        @Value("${mongo.address}")
        private String mongoAddress;
    
        @Value("${mongo.port}")
        private Integer mongoPort;
    }

    关键行如下:

                MongoClientOptions mco = new MongoClientOptions.Builder().readPreference(ReadPreference.secondaryPreferred()).build();

    这表明 mongo 客户端是次要的。

    【讨论】:

      猜你喜欢
      • 2012-07-03
      • 2012-03-10
      • 1970-01-01
      • 1970-01-01
      • 2018-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-26
      相关资源
      最近更新 更多