Een manier om dit te doen is door een unieke numerieke ID toe te wijzen aan elk van uw MongoDB-documenten en een unieke numerieke ID toe te wijzen aan elk van uw node.js-werknemers.
Gebruik bijvoorbeeld een env-var met de naam NUM_WORKERS en vervolgens in uw node.js-module:
var NumWorkers = process.env.NUM_WORKERS || 1;
U moet dan een unieke, aaneengesloten instantienummer-id (in het bereik 0 tot NumWorkers-1) toewijzen aan elk van uw werknemers (bijvoorbeeld via een opdrachtregelparameter die wordt gelezen door uw node.js-proces wanneer het wordt geïnitialiseerd). U kunt dat opslaan in een variabele genaamd MyWorkerInstanceNum.
Wanneer u een document uit MongoDB kiest, roept u de volgende functie aan (door de unieke document-ID van het document als parameter door te geven):
function isMine(documentId){
//
// Example: documentId=10
// NumWorkers= 4
// (10 % 4) = 2
// If MyWorkerInstanceNum is 2, return true, else return false.
return ((documentId % NumWorkers) === MyWorkerInstanceNum);
}
Ga alleen door met het daadwerkelijk verwerken van het document als isMine() true retourneert. Er kunnen dus meerdere werkers een document "kiezen", maar slechts één werker zal het daadwerkelijk verwerken.