【问题标题】:Most effective way to poll an Amazon SQS queue using Node使用 Node 轮询 Amazon SQS 队列的最有效方法
【发布时间】:2015-09-27 00:17:13
【问题描述】:

我的问题很短,但我觉得很有趣:

我有一个来自 Amazon SQS 服务的队列,并且我每秒都在轮询队列。当有消息时,我会处理消息,处理完后,返回轮询队列。

有没有更好的方法?,某种触发器?或者您认为哪种方法最好,以及为什么。

谢谢!

【问题讨论】:

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


    【解决方案1】:

    sqs-consumer

    是一个有用且易于使用的从 SQS 消费消息的库
    const Consumer = require('sqs-consumer');
    
    const app = Consumer.create({
      queueUrl: 'https://sqs.eu-west-1.amazonaws.com/account-id/queue-name',
      handleMessage: (message, done) => {
        console.log('Processing message: ', message);
        done();
      }
    });
    
    app.on('error', (err) => {
      console.log(err.message);
    });
    
    app.start();
    

    如果您需要更多信息,该文档已详细记录。您可以在以下位置找到文档: https://github.com/bbc/sqs-consumer

    【讨论】:

      【解决方案2】:

      正如 Mircea 所说,长轮询是一种选择。

      当您要求“触发器”时,我相信您正在寻找其他东西,而不是自己不断地轮询 SQS。如果是这种情况,我建议您查看 AWS Lambda。它允许您将代码放在云端,它会自动触发您配置的事件,例如 SNS 事件、推送到 S3 的文件等。

      http://aws.amazon.com/lambda/

      【讨论】:

        【解决方案3】:

        是的,有: http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-long-polling.html

        您可以将 SQS 队列配置为具有“接收消息等待时间”并进行长轮询。

        因此您可以将其设置为 10 秒,并且仅当您收到消息或 10 秒超时到期后,呼叫才会回来。在这种情况下,您可以连续轮询队列。

        【讨论】:

        • 但是一旦所有的消息都被消费完,不会像短轮询那样停止长轮询。您将不得不再次手动“拉”以获得下一批。
        • 没有。长轮询不会停止。它仍然会超时轮询。因此轮询有效地阻塞,直到超时到期或您收到消息。
        猜你喜欢
        • 2011-02-10
        • 1970-01-01
        • 2014-12-08
        • 2014-03-23
        • 2017-04-12
        • 2016-01-18
        • 2019-04-11
        • 2014-06-29
        • 1970-01-01
        相关资源
        最近更新 更多