メニュー
AWS SDK for Ruby
開発者ガイド

Amazon SQS でメッセージの可視性タイムアウトを指定する

Amazon SQS で、メッセージが受信された直後は、メッセージはキューに残ったままです。他のコンシューマーが再度メッセージを処理しないようにするため、Amazon SQS は可視性タイムアウトを設定します。これは、Amazon SQS によって他の消費コンポーネントがそのメッセージを受信および処理できなくなる期間です。詳細については、「可視性タイムアウト」を参照してください。

この例では、AWS SDK for Ruby を Amazon SQS で使用して、以下のことを行います。

  1. Aws::SQS::Client#get_queue_url を使用して、既存のキューの URL を取得する。

  2. Aws::SQS::Client#receive_message を使用して最大 10 件のメッセージを受信する。

  3. Aws::SQS::Client#change_message_visibility を使用して、受信後にメッセージが表示されない期間を指定する。

前提条件

コード例を実行する前に、以下で説明されているように、AWS SDK for Ruby をインストールし、設定する必要があります。

また、キュー my-queue を作成する必要があります。これは Amazon SQS コンソールで行うことができます。

require 'aws-sdk' sqs = Aws::SQS::Client.new(region: 'us-east-1') begin queue_name = "my-queue" queue_url = sqs.get_queue_url(queue_name: queue_name).queue_url receive_message_result_before = sqs.receive_message({ queue_url: queue_url, max_number_of_messages: 10 # Receive up to 10 messages, if there are that many. }) puts "Before attempting to change message visibility timeout: received #{receive_message_result_before.messages.count} message(s)." receive_message_result_before.messages.each do |message| sqs.change_message_visibility({ queue_url: queue_url, receipt_handle: message.receipt_handle, visibility_timeout: 36000 # This message will not be visible for 10 hours (10 hours * 60 minutes * 60 seconds) after first receipt. }) end # Try to retrieve the original messages after setting their visibility timeout. receive_message_result_after = sqs.receive_message({ queue_url: queue_url, max_number_of_messages: 10 }) puts "\nAfter attempting to change message visibility timeout: received #{receive_message_result_after.messages.count} message(s)." rescue Aws::SQS::Errors::NonExistentQueue puts "Cannot receive messages for a queue named '#{receive_queue_name}', as it does not exist." end

このページの内容: