Как я могу заставить мастера ждать завершения рабочих в кластере nodejs - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть приложение, развернутое в кластере Nodejs, где мастер-вилки рабочих. Рабочие выполняют некоторые действия с базой данных (которые могут занять некоторое время), а затем должны отправить некоторый результат обратно мастеру. Вот скелет того, что у меня есть. Когда я запускаю это, некоторые из сообщений от рабочих не принимаются мастером. Как я могу заставить мастера ждать, пока он не получит сообщения от всех рабочих.

if ( isMaster ) {
 for(k=0; k<nodes; k++)
        {
                cluster.fork();
                console.log("Started Node-" + k);

        }
    for (const id in cluster.workers) {
             var worker = cluster.workers[id];
             worker.on('exit', () => {
                        console.log('worker', id . ' Exited');      
                });
                worker.on('message', (msg) => {
                        console.log ("msg recvd by id:", id, 'msg:', msg);
                        consumeMsg(msg);
                });

} else { // isWorker 
       // do some database work, potentially long running (in tens of seconds)
                      .....
       process.send( { results: dbResults, ID: cluster.worker.id} );
}
...