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