在 PM2 实例之间发送事件或消息的简单方法

use*_*506 5 node.js eventemitter pm2

我正在寻找向所有 PM2 集群传达消息的最简单方法,就像使用 eventEmitter“emit”和“on”函数一样简单。

我想避免使用 RabbitMQ 等第三方工具,而仅依赖本机 Node 或 NPM。到目前为止我已经看过了

  • ipchannel,这是一个非常简单的解决方案,但当 PM2 进程重新加载时停止工作
  • 分布式事件发射器,这需要 STOMP 并使整个设置更加复杂

我期待您的建议

Kia*_*iax 7

你可以自己使用PM2

它用于访问所有 pm2 应用程序实例:

let pm2 = require('pm2');




var pm2_worker_ids = [];

pm2.connect(function (err) {

    pm2.list(function (err, data) {

        for (var i in data) {
            if (data.hasOwnProperty(i)) {
                pm2_worker_ids.push(data[i].pm2_env.pm_id);
            }
        }

        pm2.disconnect(function () {});
    });
});
Run Code Online (Sandbox Code Playgroud)

这是简单的发送事件:

if (pm2_worker_ids.hasOwnProperty(i)) {

        let data = {yourData:"you can make custom data"};

        pm2.sendDataToProcessId(pm2_worker_ids[i], {
            type: 'some random text',
            data: data,
            id: pm2_worker_ids[i],
            topic: 'some random text'
        }, function (err, res) {});

    }
Run Code Online (Sandbox Code Playgroud)

这是听你的事件:

process.on('message', function (data) {
    console.log('your actual data object', data.data);
});
Run Code Online (Sandbox Code Playgroud)

  • 我已经接受了答案,所以我认为我确认这是一个很好的解决方案。(我个人最终使用了 Redis,它比预期更容易设置) (2认同)