本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 Amazon SQS 启用客户端缓冲和请求批处理
Amazon SDK for JavaAmazonSQSBufferedAsyncClient
。此客户端允许通过使用客户端缓冲来进行简单的请求批处理 - 将从客户端发出的调用先进行缓冲,然后作为批处理请求发送到 Amazon SQS。
客户端缓冲最多允许缓冲 10 个请求并将这些请求作为一个批处理请求发送,从而减少使用 Amazon SQS 的成本并减少发送的请求数。AmazonSQSBufferedAsyncClient
会缓冲同步和异步调用。批量请求和对长轮询的支持还有助于提高吞吐量。有关更多信息,请参阅 通过 Amazon SQS 使用水平扩展和操作批处理来提高吞吐量。
由于 AmazonSQSBufferedAsyncClient
实施与 AmazonSQSAsyncClient
相同的接口,因此从 AmazonSQSAsyncClient
迁移到 AmazonSQSBufferedAsyncClient
通常只需要对现有代码进行少量的更改。
注意
Amazon SQS 缓冲异步客户端目前不支持 FIFO 队列。
使用 AmazonSQS BufferedAsyncClient
在开始之前,请完成 设置亚马逊 SQS 中的步骤。
重要
目前与. Amazon 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);
配置 AmazonSQS 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);
QueueBufferConfig 配置参数 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
参数 | 默认值 | 描述 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
longPoll |
true |
如果 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
longPollWaitTimeoutSeconds |
20 秒 |
在返回空接收结果前, 注意如果禁用长轮询,则此设置不起作用。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
maxBatchOpenMs |
200 毫秒 |
传出调用等待其他要一起对同类型的消息进行批处理的调用的最长时间(以毫秒为单位)。 设置的时间越长,则执行等量工作所需的批处理次数就越少(但是,批处理中的首次调用必须等待更长的时间)。 如果将此参数设置为 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
maxBatchSize |
每批 10 个请求 |
在一个请求中一起进行批处理的消息的最大数量。该设置越大,则执行等量请求所需的批处理就越少。 注意Amazon SQS 允许的最大值为每批 10 个请求。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
maxBatchSizeBytes |
256 KiB |
客户端尝试向 Amazon SQS 发送的消息批处理的最大大小(以字节为单位)。 注意256 KiB 是亚马逊 SQS 允许的最大值。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
maxDoneReceiveBatches |
10 个批处理 |
设置的值越高,则可满足越多的接收请求而不必调用 Amazon SQS(但是,预取的消息越多,则消息在缓冲区中停留的时间就越长,从而导致它们的可见性超时过期)。 注意
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
maxInflightOutboundBatches |
5 个批处理 |
可以同时处理的最大活跃出站批处理数量。 设置的值越高,发送出站批处理的速度就越快(受限于其他配额,例如 CPU 或带宽),并且 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
maxInflightReceiveBatches |
10 个批处理 |
可以同时处理的最大活跃接收批处理数量。 设置的值越高,可接收的消息就越多(受限于其他配额,例如 CPU 或带宽),并且 注意
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
visibilityTimeoutSeconds |
–1 |
如果此参数设置为正值(非零值),则此处设置的可见性超时将覆盖在使用的消息所在的队列上设置的可见性超时。 注意
不能将可见性超时设置为 |