AWS SQS 消息轮询应该用在 Nodejs + Koa 应用程序中吗?

Should AWS SQS message polling be used in a Nodejs + Koa application?

我创建了一个 Nodejs + Koa 应用程序,其中包含我的 Koa 网站和一个 API,它接收来自 Angular.js 的请求并在 Koa 网站上运行。

我将使用 AWS SQS 服务从应用程序推送消息。这些消息将由 AWS Lambda 函数处理。当 Lambda 函数完成工作时,它会将一条消息推送到另一个 SQS 队列。 Nodejs 应用程序将轮询该 SQS 队列以获取消息,当有消息时,它将向用户发送状态报告。

我看过 SQS 的文档,上面说不建议在单线程应用程序中使用长轮询,因为它会阻塞线程。

我想知道以 5 - 10 秒的间隔(可能更少)使用短轮询是否是个好主意?这是否有可能显着降低网站性能?有这方面的最佳做法吗?

虽然我建议将报告功能分离到不同的流程。(保持关注分开)

我不认为,即使是长轮询也会对您的应用程序性能产生不利影响。

无论 SQS 关于单线程应用程序的说法都是正确的,但对于基于 nodejs 构建的应用程序,它并不适用。当您使用长轮询的 SQS 接收消息 api 时,等待发生在服务器上,客户端 API 是异步的。

Nodejs 利用事件循环机制,在消息检索期间,其他处理可以继续。只有当客户端收到消息时,回调才会被调用,你的进程才会被阻塞。

除非你的处理很耗时,否则我认为整体处理不会受到不利影响。