node.js - 多个 AWS 实例和节点事件
问题描述
我在节点中有一个实现,其中调用 API 时会进行一些处理并在返回响应之前等待来自另一个函数的事件。这在本地运行和在 AWS 中的单个实例中运行时工作正常,但是当涉及多个实例时,我假设存在一些问题,因为 API 是从一个实例调用的,而发射器是在另一个实例中发射的。有什么方法可以在所有实例中保持监听器和发射器相同?
更新 :
经过一些研究,我发现使用带有一些路由逻辑的应用程序负载均衡器可以帮助解决这个问题。我将下面的答案标记为正确,因为虽然它对 AWS 自动缩放没有帮助,但它确实帮助我找到了解决问题的替代解决方案。
解决方案
AFAIU,您认为从一个进程发出的事件正在另一个进程中处理,但据我所知,情况绝不会如此,因为每个进程都有自己的内存,而且事件只会与进程相关联。
我添加了一个示例代码来演示我的意思。也许如果您发布您所指的代码,我们可以检查出了什么问题。
const cluster = require("cluster");
const EventEmitter = require("events");
if (cluster.isMaster) {
cluster.fork();
const myEE = new EventEmitter();
myEE.on("foo", arg =>
console.log("emitted from ", arg, "received in master")
);
setTimeout(() => {
myEE.emit("foo", "master");
}, 1000);
} else {
const myEE = new EventEmitter();
myEE.on("foo", arg => console.log("emitted from", arg, "received in worker"));
setTimeout(() => {
myEE.emit("foo", "client");
}, 2000);
}
推荐阅读
- docker - 在 Docker 和 PhpStorm 中安装 Xdebug 时出现问题
- c# - 如何使用Epplus c#在同一轮廓中添加多个折叠
- wix - 安装产品的副本
- c# - 尝试将模型对象添加到列表时出现 NullReferenceException
- javascript - 如何在 Angular 中使用 Datatables.Net 创建自定义打印预览屏幕
- java - 如何将操作栏菜单位置设置为右侧
- r - 如何在 R 中检查大数据中的错误/异常值?
- javascript - React SSR 代码拆分:Lodable.Capute 未捕获模块名称
- python - 如何修复“ConnectionResetError: [Errno 104] Connection reset by peer”错误?
- prometheus - 使用 Helm 将 scrape_configs 添加到 Prometheus