使用Node轮询Amazon SQS队列的最有效方法

时间:2015-07-08 21:01:33

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

我的问题很简短,但我觉得很有意思:

我是来自Amazon SQS服务的队列,我每秒都会轮询队列。如果有消息我处理消息并在处理完之后返回轮询队列。

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

谢谢!

3 个答案:

答案 0 :(得分:9)

用于消费来自SQS的消息的有用且易于使用的库是 sqs-consumer

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

答案 1 :(得分:3)

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

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

因此您可以将其设置为10秒,只有在您收到消息或10秒超时到期后,呼叫才会返回。您可以在此方案中连续轮询队列。

答案 2 :(得分:1)

如Mircea所述,长期投票是一种选择。

当您要求“触发器”时,我相信您正在寻找除自行连续轮询SQS之外的其他内容。如果是这种情况,我建议您查看AWS Lambda。它允许您将代码放入云中,这会自动在您配置的事件上触发,例如SNS事件,推送到S3的文件等。

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