node.js - Node 集群: Handle task only to one worker

标签 node.js multithreading postgresql cluster-computing node-cluster

我正在尝试将集群设置为多线程我的应用程序,但不是为每个工作人员委派一项任务,而是将每个任务委派给所有工作人员。

我的代码如下:

//main.js
var cluster = require('cluster');

//Code executed by the master process.
if (cluster.isMaster) {
    var numWorkers = require('os').cpus().length;
    console.log('Setting up ' + numWorkers + ' workers.');

    for (var i = 0; i< numWorkers; i++) {
        cluster.fork();
    }

    cluster.on('online', function(worker) {
        console.log('Worker ' + worker.process.pid + ' is online');
    });

    //Spawn a new worker on unexpected events.
    cluster.on('exit', function(worker, code, signal) {
        console.log('Worker ' + worker.process.pid + ' died with code: ' + code + ', and signal: ' + signal);
        console.log('Starting a new worker');
        cluster.fork();
    });
} else {
    //Set up DB
    var pg = require ('pg');
    var db = 'tcp://username:password@localhost/dbname';

    var pg_client = new pg.Client(db);
    pg_client.connect();

    //Set up Listener
    var query = pg_client.query('LISTEN newevent');
    pg_client.on('notification', function(not) {
        console.log(not.payload + ' added to queue by ' + process.pid);
    })
}

每个工作人员都在处理 else block 的内容,因此每次我向表中插入一个值(触发器启动并通知我正在监听的 pg_client)时,我都会得到尽可能多的 console.logs 作为 worker cluster.isMaster 设置,但是我希望只有一个 worker 可以处理每个 postgres 事件。我如何修复我的代码以实现上述行为?

最佳答案

这将不需要使用集群。集群均匀分布处理。

您需要更改 if-else-logic then 完全是因为......

for (var i = 0; i< numWorkers; i++) {
     cluster.fork();
}

...明确表示您需要 N 进程。 而只是 child_process.fork(); ,它会在主线程上显式执行而不。阅读它 here .

关于node.js - Node 集群: Handle task only to one worker,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33177508/

相关文章:

javascript - 解析错误的 JSON 并能够显示错误的位置

javascript - Promise.map 未完成,因为后续 Promise.join 先完成?都答应吗?

java - 如果您将一个可运行对象提交给具有多个线程的执行程序服务,多个线程是否会执行该可运行对象?

sql-server - Debezium 服务器到 PubSub : delete-operations breaks the application

python - 使用 pg_upgrade 从 11.1 升级到 11.6 的 postgres 问题

node.js - 无法使用 Google 帐户在 Node JS 本地服务器中连接 SMTP 服务器

javascript - 在使用 Sequelize 钩子(Hook)运行之前修改选择查询

ios - applicationDidBecomeActive 是否 : block the main thread?

java - 为什么抽象属性在 Runnable 接口(interface)的子类中丢失?

postgresql - 重命名 Amazon RDS 主用户名