在 PM2 实例之间发送事件或消息的简单方法
Simple way to send events or messages between PM2 instances
我正在寻找向所有 PM2 集群传送消息的最简单方法,就像使用 eventEmitter "emit" 和 "on" 函数一样简单。
我想避免使用 RabbitMQ 等第三方工具,而只依赖本机 Node 或 NPM。
到目前为止我看过
- ipchannel,这是一个非常简单的解决方案,但在 PM2 进程重新加载时停止工作
- distributed-eventemitter,这需要STOMP并且使整个设置更加复杂
期待您的建议
你可以自己用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 () {});
});
});
发送事件很简单:
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) {});
}
它正在监听您的事件 :
process.on('message', function (data) {
console.log('your actual data object', data.data);
});
我正在寻找向所有 PM2 集群传送消息的最简单方法,就像使用 eventEmitter "emit" 和 "on" 函数一样简单。
我想避免使用 RabbitMQ 等第三方工具,而只依赖本机 Node 或 NPM。 到目前为止我看过
- ipchannel,这是一个非常简单的解决方案,但在 PM2 进程重新加载时停止工作
- distributed-eventemitter,这需要STOMP并且使整个设置更加复杂
期待您的建议
你可以自己用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 () {});
});
});
发送事件很简单:
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) {});
}
它正在监听您的事件 :
process.on('message', function (data) {
console.log('your actual data object', data.data);
});