簡體   English   中英

如何通過多進程Java應用程序讀取mongodb changestream數據? 每個過程都應該獲得唯一的數據

[英]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");

然后使用取模迭代數據,並將其放入正確的集合中。 例如:

  • 21%21 = 0。
  • 42%21 = 0。
  • 63%21 =0。等等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM