為啟用長輪詢Amazon SQS訊息 QueueRequest - AWS SDK for Java 1.

我們宣布了即將推 end-of-support 出的 AWS SDK for Java (v1)。我們建議您移轉至 AWS SDK for Java v2。有關日期,其他詳細信息以及如何遷移的信息,請參閱鏈接的公告。

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

為啟用長輪詢Amazon SQS訊息 QueueRequest

Amazon SQS使用短輪詢預設使用僅會查詢服務器的子集 (按照加權隨機分佈) 來判定是否有訊息可加入回應之中。

長輪詢有助於降低使用Amazon SQS通過減少空響應的數量,當沒有可用於返回的消息以回覆 ReceiveMessage 請求發送至Amazon SQS隊列並消除錯誤的空響應。

注意

您可以將長輪詢頻率從1-20 秒

在建立排列時啟用長輪詢

若要在創建Amazon SQS隊列中,設置ReceiveMessageWaitTimeSeconds上的屬性CreateQueueRequest對象之前調用卓越亞馬遜 SQS 類createQueue方法。

匯入

import com.amazonaws.services.sqs.AmazonSQS; import com.amazonaws.services.sqs.AmazonSQSClientBuilder; import com.amazonaws.services.sqs.model.AmazonSQSException; import com.amazonaws.services.sqs.model.CreateQueueRequest;

Code

final AmazonSQS sqs = AmazonSQSClientBuilder.defaultClient(); // Enable long polling when creating a queue CreateQueueRequest create_request = new CreateQueueRequest() .withQueueName(queue_name) .addAttributesEntry("ReceiveMessageWaitTimeSeconds", "20"); try { sqs.createQueue(create_request); } catch (AmazonSQSException e) { if (!e.getErrorCode().equals("QueueAlreadyExists")) { throw e; } }

請參閱 GitHub 上的完整範例

在現有佇列上啟用長輪詢

除了在創建隊列時啟用長輪詢外,還可以通過設置ReceiveMessageWaitTimeSecondsSetQueueAttributesRequest之前調用卓越亞馬遜 SQS 類setQueueAttributes方法。

匯入

import com.amazonaws.services.sqs.model.SetQueueAttributesRequest;

Code

SetQueueAttributesRequest set_attrs_request = new SetQueueAttributesRequest() .withQueueUrl(queue_url) .addAttributesEntry("ReceiveMessageWaitTimeSeconds", "20"); sqs.setQueueAttributes(set_attrs_request);

請參閱 GitHub 上的完整範例

在收到訊息時啟用長輪詢

您可以在接收消息時啟用長輪詢,方法是在ReceiveMessageRequest您提供給卓越亞馬遜 SQS 類的receiveMessage方法。

注意

您應該確保AWS客户端的請求超時大於最長輪詢時間 (20s),因此您的receiveMessage請求在等待下一個輪詢事件時不會超時!

匯入

import com.amazonaws.services.sqs.model.ReceiveMessageRequest;

Code

ReceiveMessageRequest receive_request = new ReceiveMessageRequest() .withQueueUrl(queue_url) .withWaitTimeSeconds(20); sqs.receiveMessage(receive_request);

請參閱 GitHub 上的完整範例

詳細資訊