使用 Node 轮询 Amazon SQS 队列的最有效方法
Posted
技术标签:
【中文标题】使用 Node 轮询 Amazon SQS 队列的最有效方法【英文标题】:Most effective way to poll an Amazon SQS queue using Node 【发布时间】:2015-09-27 00:17:13 【问题描述】:我的问题很短,但我觉得很有趣:
我有一个来自 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 秒超时到期后,呼叫才会回来。在这种情况下,您可以连续轮询队列。
【讨论】:
但是一旦所有的消息都被消费完,不会像短轮询那样停止长轮询。您将不得不再次手动“拉”以获得下一批。 没有。长轮询不会停止。它仍然会超时轮询。因此轮询有效地阻塞,直到超时到期或您收到消息。以上是关于使用 Node 轮询 Amazon SQS 队列的最有效方法的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Amazon SQS Spring 云注释 @SqsListener 轮询特定数量的消息