使用 Ruby 轮询 Amazon SQS 队列
Polling Amazon SQS Queue with Ruby
用于Ruby的Amazon SDK经常更改,aws-sdk
Rubygem的当前版本是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 使用它。
用于Ruby的Amazon SDK经常更改,aws-sdk
Rubygem的当前版本是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 使用它。