自2024年7月31日起, AWS SDK for Java 1.x已进入维护模式,并将于2025年12月31日end-of-support
本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在 Amazon SQS 中设置可见性超时
为了确保消息接收,在 Amazon SQS 中收到的消息会保留在队列中,直到被删除。在指定的可见性超时时间后,已接收但未删除的消息将可以在后续请求中使用,以帮助防止在对消息进行处理和删除之前重复接收消息。
注意
使用标准队列时,可见性超时无法保证不会接收消息两次。如果您使用的是标准队列,请确保您的代码能够处理多次收到同一条消息的情况。
为单个消息设置消息可见性超时
当您收到消息时,您可以通过在 ChangeMessageVisibilityRequest 中将消息的接收句柄传递到 AmazonSQS 类的 changeMessageVisibility
方法来修改其可见性超时。
导入
import com.amazonaws.services.sqs.AmazonSQS; import com.amazonaws.services.sqs.AmazonSQSClientBuilder;
代码
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 上的完整示例
一次性为多条消息设置的消息可见性超时
要一次性设置多条消息的可见性超时,请创建 ChangeMessageVisibilityBatchRequestEntry 对象的列表,每个对象包含唯一的 ID 和接收句柄。然后将该列表传递给 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;
代码
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 上的完整示例
更多信息
-
《Amazon SQS Developer Guide》中的 Visibility Timeout
-
《Amazon SQS API Reference》中的 SetQueueAttributes
-
《Amazon SQS API Reference》中的 GetQueueAttributes
-
《Amazon SQS API Reference》中的 ReceiveMessage
-
《Amazon SQS API Reference》中的 ChangeMessageVisibility
-
《Amazon SQS API Reference》中的 ChangeMessageVisibilityBatch