Jednym ze sposobów, aby to zrobić, jest przypisanie unikalnego identyfikatora numerycznego do każdego dokumentu MongoDB i przypisanie unikalnego identyfikatora numerycznego do każdego z procesów roboczych node.js.
Na przykład miej zmienną środowiskową o nazwie NUM_WORKERS, a następnie w module node.js:
var NumWorkers = process.env.NUM_WORKERS || 1;
Następnie musisz przypisać unikalny, ciągły identyfikator numeru instancji (w zakresie od 0 do NumWorkers-1) do każdego z procesów roboczych (np. za pomocą parametru wiersza poleceń odczytanego przez proces node.js podczas jego inicjalizacji). Możesz zapisać to w zmiennej o nazwie MyWorkerInstanceNum.
Po wybraniu dokumentu z MongoDB wywołaj następującą funkcję (przekazując unikalny identyfikator dokumentu jako parametr):
function isMine(documentId){
//
// Example: documentId=10
// NumWorkers= 4
// (10 % 4) = 2
// If MyWorkerInstanceNum is 2, return true, else return false.
return ((documentId % NumWorkers) === MyWorkerInstanceNum);
}
Kontynuuj faktyczne przetwarzanie dokumentu tylko wtedy, gdy isMine() zwraca wartość true. Tak więc wiele procesów roboczych może „wybrać” dokument, ale tylko jeden pracownik faktycznie go przetworzy.