使用 Ruby 轮询 Amazon SQS 队列

Polling Amazon SQS Queue with Ruby

用于Ruby的Amazon SDK经常更改,aws-sdkRubygem的当前版本是2.0.29. The old method轮询Amazon SQS消息的是no更长的有效期

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

现在AWS SDK for Ruby2.0版本的正确方法是什么?

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

此外,您可以将 SQS 配置为始终 return 一条消息作为响应。详情如下http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-long-polling.html

您需要确保连接不会超时,以防您必须等待太长时间才能收到邮件并将其传递给您。

最后,您可以通过在 while 循环中调用 receive_message 来模拟 poll 方法,并且仅在响应包含一些消息时才跳出循环。您可以使用递归以类似的方式处理所有消息。

2015 年 3 月 12 日更新

如果你想模仿轮询的方式,你也需要删除消息。

版本2的SDK还没有实现队列轮询。它作为功能请求在 SDK 待办事项列表中:https://github.com/aws/aws-sdk-ruby/blob/master/FEATURE_REQUESTS.md#amazon-sqs-queue-poller.

您可以检查 Shoryuken,它建立在 SQS 之上并且还与 Rails (ActiveJob) 集成。但您也可以在独立的 Ruby 应用程序中不使用 Rails 使用它。