設定可見性逾時Amazon SQS - AWS SDK for Java 1.x

截至 2024 年 7 月 31 日, AWS SDK for Java 1.x 已進入維護模式,並將end-of-support在 2025 年 12 月 31 日送達。我們建議您遷移至 AWS SDK for Java 2.x,以繼續接收新功能、可用性改善和安全性更新。

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

設定可見性逾時Amazon SQS

當收到消息時Amazon SQS,它一直保留在隊列中,直到它被刪除,以確保收到。已收到但未刪除的消息將在給定可見性逾時,以幫助防止在處理和刪除郵件之前多次接收消息。

注意

當您使用標準隊列,可見性逾時並不保證不會收到兩次訊息。如果您使用的是標準隊列,請確保您的代碼可以處理同一消息多次傳遞的情況。

設定單個訊息的訊息可見性逾時

收到消息後,您可以修改其可見性超時,方法是將其收據句柄傳遞到ChangeMessageVisibilityRequest您傳遞給卓越亞馬遜 SQS 類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 上的完整範例

一次設置多條消息的消息可見性超時

若要同時為多條消息設置消息可見性超時,請創建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;

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 上的完整範例

詳細資訊