![](/img/trans.png)
[英]how to read the json with data like and process using objectMapper in java
[英]how to read mongodb changestream data by multi process java application ? each process should get unique data
我創建了一個微服務,該服務正在偵聽某個集合的mongodb changestream通知(即:mycollection)並更新另一個集合中的更改流數據(即,yourcollection)
為了實現可伸縮性,我創建了10個應用程序實例,該實例將讀取相同的changestream通知。
前-
假設一次在“ mycollection”集合中更新了100條記錄。 因此更改流將獲得100條記錄的通知。
第一個實例應從變更流中讀取1-20條記錄,並更新其他集合中的記錄(即:yourcollection)
第二個實例應更新變更流中的21-40條記錄,並更新集合“ yourcollection”中的記錄。
第三個實例應更新變更流中的41-60條記錄,並更新集合“ yourcollection”中的記錄。
所以..在...
沒有兩個實例將從變更流中獲取相同的重復數據。
有什么辦法可以實現上述要求。
以下是我的代碼,每個進程獲取重復數據。 有什么建議可以解決這種情況?
公共字符串startProcess(){
MongoClient mongoClient = new MongoClient(new MongoClientURI("mongodb://localhost:27017,localhost:27018,localhost:27019/user?replSet=simpliReplica"));
MongoDatabase database = mongoClient.getDatabase("mypoc");
MongoCollection<Document> collection = database.getCollection("user");
try {
Block<ChangeStreamDocument<Document>> printBlock = new Block<ChangeStreamDocument<Document>>() {
public void apply(final ChangeStreamDocument<Document> changeStreamDocument) {
System.out.println(" MyService:::"+changeStreamDocument.getFullDocument());
}
};
// collection.watch - Establishes a Change Stream on a collection.This will identify any changes happening to the collection.
collection.watch(asList(Aggregates.match(Filters.in("operationType", asList("insert", "update", "replace", "delete")))))
.fullDocument(FullDocument.UPDATE_LOOKUP).forEach(printBlock);
} catch (IOException e) {
e.printStackTrace();
}
}
}
坦克斯·迪利普(Thannks Dillip)
您可以嘗試使用以下方法定義不同的數據庫/集合:
MongoDatabase database = mongoClient.getDatabase("mypoc");
MongoCollection<Document> collection = database.getCollection("user");
然后使用取模迭代數據,並將其放入正確的集合中。 例如:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.