Я прочитал https://docs.mongodb.com/manual/core/retryable-writes/ и настроил все необходимые свойства, чтобы он заработал, но пока не повезло.
Имеют реплику из трех участников, и пока программа работает для вставки записей, я убил основной, и пока происходит выбор для нового основного цикла, цикл выполняется в моем коде, и эти записи не пытаются повторить запись после выбора нового участника.
MongoDB Версия локальная
``
mongo --version
MongoDB shell version v3.6.6
git version: 6405d65b1d6432e138b44c13085d0c2fe235d6bd
OpenSSL version: OpenSSL 1.1.0h 27 Mar 2018
allocator: system
modules: enterprise
build environment:
distarch: x86_64
target_arch: x86_64
``
драйверы Mongo Java
``compile group: 'org.mongodb', name: 'mongodb-driver', version: '3.6.4'
compile group: 'org.mongodb', name: 'mongodb-driver-core', version: '3.6.4'
compile group: 'org.mongodb', name: 'bson', version: '3.6.4'``
Строка подключения Mongo
``dbUri = "mongodb://localhost:28000,localhost:28001,localhost:28002/test?replicaSet=rs01&retryWrites=true&w=2";``
создание соединения с использованием MongoClient
MongoClient mongoClient = new MongoClient(new MongoClientURI(dbUri));
вставка выполняется с помощью insertOne, как показано ниже
``
private static void insertData(MongoClient mongoClient) {
MongoDatabase db = mongoClient.getDatabase("test");
MongoCollection<Document> collection = db.getCollection("customer");
// collection.withWriteConcern(WriteConcern.W2);
deleteOldDocumets(collection);
int customerId = 0;
while (customerId < 1000) {
++customerId;
try {
Document document = new Document();
document.put("name", "user" + customerId);
document.put("age", customerId);
collection.insertOne(document);
logger.info("Customer : " + customerId + " Time is : "
+ LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS")));
Thread.sleep(10);
} catch (Exception e) {
logger.info("Primary connection closed, starting election in 5 secs");
}
}
mongoClient.close();
}``
### DB master props ###
``MongoDB Enterprise rs01:PRIMARY> db.isMaster();
{
"hosts" : [
"localhost:28000",
"localhost:28001",
"localhost:28002"
],
"setName" : "rs01",
"setVersion" : 1,
"ismaster" : true,
"secondary" : false,
"primary" : "localhost:28000",
"me" : "localhost:28000",
"electionId" : ObjectId("7fffffff0000000000000001"),
"lastWrite" : {
"opTime" : {
"ts" : Timestamp(1540647424, 1),
"t" : NumberLong(1)
},
"lastWriteDate" : ISODate("2018-10-27T13:37:04Z"),
"majorityOpTime" : {
"ts" : Timestamp(1540647424, 1),
"t" : NumberLong(1)
},
"majorityWriteDate" : ISODate("2018-10-27T13:37:04Z")
},
"maxBsonObjectSize" : 16777216,
"maxMessageSizeBytes" : 48000000,
"maxWriteBatchSize" : 100000,
"localTime" : ISODate("2018-10-27T13:37:10.713Z"),
"logicalSessionTimeoutMinutes" : 30,
"minWireVersion" : 0,
"maxWireVersion" : 6,
"readOnly" : false,
"ok" : 1,
"operationTime" : Timestamp(1540647424, 1),
"$clusterTime" : {
"clusterTime" : Timestamp(1540647424, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}
``
Любая подсказка очень ценится.