【发布时间】:2015-09-27 00:17:13
【问题描述】:
我的问题很短,但我觉得很有趣:
我有一个来自 Amazon SQS 服务的队列,并且我每秒都在轮询队列。当有消息时,我会处理消息,处理完后,返回轮询队列。
有没有更好的方法?,某种触发器?或者您认为哪种方法最好,以及为什么。
谢谢!
【问题讨论】:
标签: node.js amazon-web-services amazon-sqs
我的问题很短,但我觉得很有趣:
我有一个来自 Amazon SQS 服务的队列,并且我每秒都在轮询队列。当有消息时,我会处理消息,处理完后,返回轮询队列。
有没有更好的方法?,某种触发器?或者您认为哪种方法最好,以及为什么。
谢谢!
【问题讨论】:
标签: node.js amazon-web-services amazon-sqs
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
【讨论】:
正如 Mircea 所说,长轮询是一种选择。
当您要求“触发器”时,我相信您正在寻找其他东西,而不是自己不断地轮询 SQS。如果是这种情况,我建议您查看 AWS Lambda。它允许您将代码放在云端,它会自动触发您配置的事件,例如 SNS 事件、推送到 S3 的文件等。
【讨论】:
是的,有: http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-long-polling.html
您可以将 SQS 队列配置为具有“接收消息等待时间”并进行长轮询。
因此您可以将其设置为 10 秒,并且仅当您收到消息或 10 秒超时到期后,呼叫才会回来。在这种情况下,您可以连续轮询队列。
【讨论】: