【问题标题】:Should AWS SQS message polling be used in a Nodejs + Koa application?是否应该在 Nodejs + Koa 应用程序中使用 AWS SQS 消息轮询?
【发布时间】:2016-10-01 21:29:33
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: node.js amazon-web-services amazon-sqs


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 目前我正在开发一个 nodejs 模块,它将创建一个 child_process。该进程将使用长池化来池化 SQS 消息并将消息数据发送给父进程。
    • gr8。没有真正的担忧。我将始终建议长轮询,节省成本和网络带宽。
    猜你喜欢
    • 2020-01-12
    • 2020-10-04
    • 1970-01-01
    • 2021-01-17
    • 2022-07-27
    • 2020-01-30
    • 1970-01-01
    • 2021-03-22
    • 1970-01-01
    相关资源
    最近更新 更多