首页 > 解决方案 > 多个 AWS 实例和节点事件

问题描述

我在节点中有一个实现,其中调用 API 时会进行一些处理并在返回响应之前等待来自另一个函数的事件。这在本地运行和在 AWS 中的单个实例中运行时工作正常,但是当涉及多个实例时,我假设存在一些问题,因为 API 是从一个实例调用的,而发射器是在另一个实例中发射的。有什么方法可以在所有实例中保持监听器和发射器相同?

更新 :

经过一些研究,我发现使用带有一些路由逻辑的应用程序负载均衡器可以帮助解决这个问题。我将下面的答案标记为正确,因为虽然它对 AWS 自动缩放没有帮助,但它确实帮助我找到了解决问题的替代解决方案。

标签: node.jsamazon-web-servicesamazon-elastic-beanstalk

解决方案


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);
}

推荐阅读