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

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

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

有没有更好的办法吗?,某种触发器? 或者你认为哪种方法最好,为什么。

谢谢!

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

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

所以你可以把它设置为10秒,只有当你有消息或10秒超时后,呼叫才会回来。 在这种情况下,您可以连续轮询队列。

用于消费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(); 

如果你需要更多的信息,这是很好的logging。 你可以在https://github.com/bbc/sqs-consumerfind这个文档

正如Mircea所说,长期投票是一种select。

当你要求一个“触发器”的时候,我相信你正在寻找一些东西,而不是连续不断地对SQS进行投票。 如果是这样的话,我build议你看看AWS Lambda。 它允许你把代码放在云中,这会自动在你configuration的事件上触发,比如SNS事件,一个推送到S3等的文件。

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