0
모든 메시지를 SQS 대기열에서 다운로드 할 수 있지만 대기열에 보관하는 방법은 무엇입니까?Ruby, AWS SQS : 대기열에서 메시지를 제거하지 않고 대기열에서 모든 메시지를 가져 오는 방법
실제로 메시지를 실행하지 않는 것이 분석 목적으로 필요합니다. 다운로드 한 후에 메시지가 대기열에 남아 있어야하기 때문입니다.
모든 메시지를 SQS 대기열에서 다운로드 할 수 있지만 대기열에 보관하는 방법은 무엇입니까?Ruby, AWS SQS : 대기열에서 메시지를 제거하지 않고 대기열에서 모든 메시지를 가져 오는 방법
실제로 메시지를 실행하지 않는 것이 분석 목적으로 필요합니다. 다운로드 한 후에 메시지가 대기열에 남아 있어야하기 때문입니다.
AWS API를 사용하면 큐에서 10 개 단위로 메시지를 다운로드 할 수 있습니다. 문제는 메시지를 여러 번 요청하면 동일한 메시지가 다시 수신 될 수 있다는 것입니다.
트릭은 모든 메시지를 다운로드 할 때까지 다운로드 한 메시지를 후속 요청에 대해 숨긴다는 것입니다. 예를 들어 다른 고객이 메시지에 액세스 할 수 없게되는 등의 결과가 발생합니다. 코드의
예 :
require "aws-sdk" # gem "aws-sdk", "~> 3"
client = Aws::SQS::Client.new(:region => "eu-west-1")
queue_url = "https://sqs.eu-west-1.amazonaws.com/XXXX/your_queueu"
queue =
Aws::SQS::Queue.new({
:url => queue_url,
:client => client
})
loop do
# [Aws::SQS::Queue.receive_messages documentation](http://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/SQS/Queue.html#receive_messages-instance_method)
messages =
queue.receive_messages({
:max_number_of_messages => 10,
:visibility_timeout => 10 # make this as big as necessary to give time to the script to get all the Messages
})
messages.each do |message|
# [Aws::SQS::Message documentation](http://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/SQS/Message.html)
puts message.body # send the output to a file or where do you want
end
break if messages.length.zero?
end