cluster.on("message", (worker, msg) => { msg = JSON.parse(msg); try { if (!queue[msg.id].isDestroyed()) { queue[msg.id].send("systeminformation-reply-"+msg.id, msg.res); delete queue[msg.id]; } } catch(e) { // Window has been closed, ignore. } });
stopSignals.forEach(function (signal) { process.on(signal, function () { console.log(`Got ${signal}, stopping workers...`); stopping = true; cluster.disconnect(function () { console.log("All workers stopped, exiting."); process.exit(0); }); }); });
function dispatch(type, id, arg) { let selectedID = lastID+1; if (selectedID > numCPUs-1) selectedID = 0; cluster.workers[workers[selectedID]].send(JSON.stringify({ id, type, arg })); lastID = selectedID; }
start(args) { return Promise.resolve() .then(() => this.processFlags(args)) .then(() => { if (this.flags.instances !== undefined && cluster.isMaster) { return this.startWorkers(this.flags.instances); } return this._run(); }); }
startNewNode(nodeID) { this.logger.info(`Starting ${nodeID} node...`); const worker = cluster.fork(); worker.nodeID = nodeID; worker.on("message", msg => this.workerMessageHandler(worker, msg)); worker.on("disconnect", () => { const idx = this.nodes.findIndex(node => node.worker == worker); if (idx != -1) { const node = this.nodes[idx]; this.nodes.splice(idx, 1); this.logger.info(`Node ${node.nodeID} stopped.`); this.removeNodeIDFromMetric(node.nodeID); } }); worker.send({ cmd: "start", nodeID }); this.nodes.push({ nodeID, worker }); }
broker.start() .then(async () => { broker.repl(); const nodeCount = Number(process.env.NODE_COUNT); if (nodeCount > 0) await broker.call("nodes.scale", { count: nodeCount }); stopSignals.forEach(signal => { process.on(signal, () => { broker.logger.info(`Got ${signal}, stopping workers...`); stopping = true; cluster.disconnect(() => { broker.logger.info("All workers stopped, exiting."); process.exit(0); }); }); }); await broker.Promise.delay(5000); broker.loadService("./examples/math.service.js"); }) .catch(err => broker.logger.error(err));
// Respond to master's requests for worker's local metrics. process.on('message', message => { if (cluster().isWorker && message.type === GET_METRICS_REQ) { Promise.all(registries.map(r => r.getMetricsAsJSON())) .then(metrics => { process.send({ type: GET_METRICS_RES, requestId: message.requestId, metrics, }); }) .catch(error => { process.send({ type: GET_METRICS_RES, requestId: message.requestId, error: error.message, }); }); } });
cluster.on("message", (worker, msg) => { msg = JSON.parse(msg); try { if (!queue[msg.id].isDestroyed()) { queue[msg.id].send("systeminformation-reply-"+msg.id, msg.res); delete queue[msg.id]; } } catch(e) { // Window has been closed, ignore. } });
function dispatch(type, id, arg) { let selectedID = lastID+1; if (selectedID > numCPUs-1) selectedID = 0; cluster.workers[workers[selectedID]].send(JSON.stringify({ id, type, arg })); lastID = selectedID; }
stopSignals.forEach(function (signal) { process.on(signal, function () { console.log(`Got ${signal}, stopping workers...`); stopping = true; cluster.disconnect(function () { console.log("All workers stopped, exiting."); process.exit(0); }); }); });