Amazon SQS で可視性タイムアウトを設定する - AWS SDK for Java 1.x

AWS SDK for Java (v1) の近日発表 end-of-support しました。AWS SDK for Java v2 に移行することをお勧めします。日付、その他の詳細、移行方法については、リンク先の発表内容を参照してください。

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon SQS で可視性タイムアウトを設定する

Amazon SQS でメッセージを受信すると、受信確認のために、削除されるまでキューに残ります。削除されなかった受信メッセージは、指定された可視性タイムアウトの後に以降のリクエストで使用でき、メッセージが処理および削除される前に複数回受信することを防ぎます。

注記

標準キューを使用している場合、可視性タイムアウトはメッセージを 2 回受信しない保証にはなりません。標準キューを使用している場合は、同じメッセージが複数回配信されるケースをコードが処理できることを確認してください。

単一のメッセージのメッセージ可視性タイムアウトを設定する

メッセージを受信したとき、渡したい ChangeMessageVisibilityRequest の受信ハンドルを AmazonSQS クラスの changeMessageVisibility メソッドに渡すことで、可視性タイムアウトを変更することができます。

インポート

import com.amazonaws.services.sqs.AmazonSQS; import com.amazonaws.services.sqs.AmazonSQSClientBuilder;

Code

AmazonSQS sqs = AmazonSQSClientBuilder.defaultClient(); // Get the receipt handle for the first message in the queue. String receipt = sqs.receiveMessage(queue_url) .getMessages() .get(0) .getReceiptHandle(); sqs.changeMessageVisibility(queue_url, receipt, timeout);

GitHub で完全な例をご覧ください。

複数のメッセージのメッセージ可視性タイムアウトを同時に設定する

複数のメッセージのメッセージ可視性タイムアウトを設定するには、それぞれに一意の ID 文字列と受信ハンドルを含む ChangeMessageVisibilityBatchRequestEntry オブジェクトのリストを作成します。次に、リストを Amazon SQS クライアントクラスの changeMessageVisibilityBatch メソッドに渡します。

インポート

import com.amazonaws.services.sqs.AmazonSQS; import com.amazonaws.services.sqs.AmazonSQSClientBuilder; import com.amazonaws.services.sqs.model.ChangeMessageVisibilityBatchRequestEntry; import java.util.ArrayList; import java.util.List;

Code

AmazonSQS sqs = AmazonSQSClientBuilder.defaultClient(); List<ChangeMessageVisibilityBatchRequestEntry> entries = new ArrayList<ChangeMessageVisibilityBatchRequestEntry>(); entries.add(new ChangeMessageVisibilityBatchRequestEntry( "unique_id_msg1", sqs.receiveMessage(queue_url) .getMessages() .get(0) .getReceiptHandle()) .withVisibilityTimeout(timeout)); entries.add(new ChangeMessageVisibilityBatchRequestEntry( "unique_id_msg2", sqs.receiveMessage(queue_url) .getMessages() .get(0) .getReceiptHandle()) .withVisibilityTimeout(timeout + 200)); sqs.changeMessageVisibilityBatch(queue_url, entries);

GitHub で完全な例をご覧ください。

詳細