使用Ruby轮询Amazon SQS队列

时间:2015-03-11 18:15:34

标签: amazon-web-services amazon-sqs aws-sdk

Amazon SDK for Ruby经常更改,aws-sdk Ruby gem的当前版本为2.0.29。轮询Amazon SQS消息的old method不再有效

# polling SQS Queue
queue.poll do |msg|
  puts "Got message: #{msg.body}"
end

AWS SDK for Ruby版本2.0的正确方法是什么?

3 个答案:

答案 0 :(得分:1)

在最新的Ruby AWS SDK的文档中,我没有看到轮询方法。但是,有一种方法receive_message。详细信息位于http://docs.aws.amazon.com/sdkforruby/api/Aws/SQS/Client.html#receive_message-instance_method

此外,您可以将SQS配置为始终返回响应消息。以下是详细信息http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-long-polling.html

您需要确保连接不会超时,以防您需要等待太长时间才能将邮件送达并发送给您。

最后,您可以通过在while循环中调用receive_message来模仿poll方法,并且只有在响应包含某些消息时才会中断循环。您可以使用递归以类似方式处理所有消息。

2015年3月12日更新

如果您想模仿民意调查方法,您还需要删除该邮件。

答案 1 :(得分:1)

版本2 SDK尚未实现队列轮询。它作为功能请求位于SDK backlog上:https://github.com/aws/aws-sdk-ruby/blob/master/FEATURE_REQUESTS.md#amazon-sqs-queue-poller

答案 2 :(得分:0)

您可以查看Shoryuken,它是在SQS之上构建的,还可以与Rails(ActiveJob)集成。但是你也可以在没有Rails的情况下在一个独立的Ruby应用程序中使用它。