Une façon de le faire est d'attribuer un identifiant numérique unique à chacun de vos documents MongoDB et d'attribuer un identifiant numérique unique à chacun de vos nœuds de calcul node.js.
Par exemple, ayez une variable d'environnement appelée NUM_WORKERS, puis dans votre module node.js :
var NumWorkers = process.env.NUM_WORKERS || 1;
Vous devez ensuite attribuer un identifiant de numéro d'instance unique et contigu (entre 0 et NumWorkers-1) à chacun de vos workers (par exemple via un paramètre de ligne de commande lu par votre processus node.js lors de son initialisation). Vous pouvez stocker cela dans une variable appelée MyWorkerInstanceNum.
Lorsque vous choisissez un document dans MongoDB, appelez la fonction suivante (en passant le documentId unique du document en tant que paramètre) :
function isMine(documentId){
//
// Example: documentId=10
// NumWorkers= 4
// (10 % 4) = 2
// If MyWorkerInstanceNum is 2, return true, else return false.
return ((documentId % NumWorkers) === MyWorkerInstanceNum);
}
Ne continuez à traiter réellement le document que si isMine() renvoie true.Ainsi, plusieurs travailleurs peuvent "choisir" un document, mais un seul travailleur le traitera réellement.