本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 Amazon SQS 啟用用戶端緩衝和請求批次處理
AWS SDK for JavaAmazonSQSBufferedAsyncClient
。此用戶端可使用用戶端緩衝功能 (即用戶端發出的呼叫會先經過緩衝處理),再以批次請求的形式送往 Amazon SQS,如此一來請求的批次處理便更加簡易。
用戶端緩衝功能最多可緩衝處理 10 個請求並以批次請求的形式傳送,降低了使用 Amazon SQS 的成本且能減少傳送的請求數。AmazonSQSBufferedAsyncClient
會對同步和非同步的呼叫進行緩衝處理。批次處理的請求以及對長輪詢的支援也有助於提高傳輸量。如需詳細資訊,請參閱 透過 Amazon SQS 使用水平擴展和動作批次處理來增加輸送量。
由於 AmazonSQSBufferedAsyncClient
實作的介面與 AmazonSQSAsyncClient
相同,從 AmazonSQSAsyncClient
移轉到 AmazonSQSBufferedAsyncClient
通常只需對既有的程式碼進行最少的更動。
注意
Amazon SQS 緩衝非同步用戶端目前不支援 FIFO 佇列。
使用亞馬遜 BufferedAsyncClient
開始之前,請完成 設置 Amazon SQS 中的步驟。
重要
目前 AWS SDK for Java 2.x 不相容於AmazonSQSBufferedAsyncClient
.
您可以根據 AmazonSQSAsyncClient
建立一個新的 AmazonSQSBufferedAsyncClient
,例如:
// Create the basic Amazon SQS async client final AmazonSQSAsync sqsAsync = new AmazonSQSAsyncClient(); // Create the buffered client final AmazonSQSAsync bufferedSqs = new AmazonSQSBufferedAsyncClient(sqsAsync);
新的 AmazonSQSBufferedAsyncClient
建立完成後,您可以使用它來傳送多個請求至 Amazon SQS (如同使用 AmazonSQSAsyncClient
),例如:
final CreateQueueRequest createRequest = new CreateQueueRequest().withQueueName("MyQueue"); final CreateQueueResult res = bufferedSqs.createQueue(createRequest); final SendMessageRequest request = new SendMessageRequest(); final String body = "Your message text" + System.currentTimeMillis(); request.setMessageBody( body ); request.setQueueUrl(res.getQueueUrl()); final Future<SendMessageResult> sendResult = bufferedSqs.sendMessageAsync(request); final ReceiveMessageRequest receiveRq = new ReceiveMessageRequest() .withMaxNumberOfMessages(1) .withQueueUrl(queueUrl); final ReceiveMessageResult rx = bufferedSqs.receiveMessage(receiveRq);
配置亞馬遜 BufferedAsyncClient
AmazonSQSBufferedAsyncClient
已預先設為適合大多數使用案例的組態。您可以進一步設定 AmazonSQSBufferedAsyncClient
,例如:
-
使用必要的組態參數,建立
QueueBufferConfig
類別的執行個體。 -
對
AmazonSQSBufferedAsyncClient
建構函式提供此執行個體。
// Create the basic Amazon SQS async client final AmazonSQSAsync sqsAsync = new AmazonSQSAsyncClient(); final QueueBufferConfig config = new QueueBufferConfig() .withMaxInflightReceiveBatches(5) .withMaxDoneReceiveBatches(15); // Create the buffered client final AmazonSQSAsync bufferedSqs = new AmazonSQSBufferedAsyncClient(sqsAsync, config);
參數 | 預設值 | 描述 |
---|---|---|
longPoll |
true |
若 |
longPollWaitTimeoutSeconds |
20 秒 |
在傳回空的接收結果前, 注意停用長輪詢時,此設定沒有作用。 |
maxBatchOpenMs |
200 毫秒 |
傳出呼叫對於其他也要批次處理同類型訊息的呼叫稍作等待的時間上限 (單位為毫秒)。 此設定值越高,執行相同工作量所需的批次數就越少 (但是,批次的第一次呼叫就需要花越長時間等待)。 若將此參數設為 |
maxBatchSize |
每批次 10 個請求 |
單次請求同時批次處理的訊息數上限。此設定值越高,執行相同請求數所需的批次數量就越少。 注意Amazon SQS 允許的上限值為每批次 10 個請求。 |
maxBatchSizeBytes |
256 KiB |
用戶端嘗試傳送至 Amazon SQS 之訊息批次的大小上限,單位為位元組。 注意256 KiB 是 Amazon SQS 允許的最大值。 |
maxDoneReceiveBatches |
10 個批次 |
此設定值越高,則不必呼叫 Amazon SQS 就能滿足越多的接收請求 (但是,預取的訊息越多,停留在緩衝區內的時間就越久,而導致訊息的可見性逾時會到期)。 注意
|
maxInflightOutboundBatches |
5 個批次 |
可同時處理的活動中傳出批次的上限。 此設定值越高,傳出批次的傳送速度越快 (受限於 CPU 或頻寬等的配額),且 |
maxInflightReceiveBatches |
10 個批次 |
可同時處理的活動中接收批次的上限。 此設定值越高,可接收的訊息數越多 (受限於 CPU 或頻寬等的配額),且 注意
|
visibilityTimeoutSeconds |
-1 |
若將此參數設為非零正值,其設定的可見性逾時值就會覆寫消費訊息的佇列所設的可見性逾時值。 注意
可見性逾時不可設為 |