我們宣布
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
為啟用長輪詢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 上的完整範例
在現有佇列上啟用長輪詢
除了在創建隊列時啟用長輪詢外,還可以通過設置ReceiveMessageWaitTimeSeconds
在SetQueueAttributesRequest之前調用卓越亞馬遜 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 上的完整範例
詳細資訊
-
Amazon SQS長輪詢中的Amazon SQS開發人員指南
-
CreateQueue中的Amazon SQSAPI 參考
-
ReceiveMessage中的Amazon SQSAPI 參考
-
SetQueueAttributes中的Amazon SQSAPI 參考