As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Habilitando o buffer do lado do cliente e o agrupamento de solicitações com o Amazon SQS
O AWS SDK for JavaAmazonSQSBufferedAsyncClient
, que acessa o Amazon SQS. Esse cliente permite o envio simples de solicitações em lotes usando armazenamento em buffer no lado do cliente. As chamadas feitas pelo cliente são primeiro armazenadas em buffer e, em seguida, enviadas como uma solicitação em lote para o Amazon SQS.
O armazenamento em buffer no lado do cliente permite que até 10 solicitações sejam armazenadas em buffer e enviadas como uma solicitação em lote, diminuindo o custo de uso do Amazon SQS e reduzindo o número de solicitações enviadas. O AmazonSQSBufferedAsyncClient
armazena tanto as chamadas síncronas quanto as assíncronas em buffer. Solicitações em lote e suporte para sondagem longa também podem ajudar a aumentar a taxa de transferência. Para ter mais informações, consulte Aumento da produtividade usando escalabilidade horizontal e lotes de ações com o Amazon SQS.
como o AmazonSQSBufferedAsyncClient
implementa a mesma interface que o AmazonSQSAsyncClient
, migrar de AmazonSQSAsyncClient
para AmazonSQSBufferedAsyncClient
normalmente requer apenas pequenas mudanças no seu código existente.
nota
Atualmente, o cliente assíncrono no buffer do Amazon SQS não oferece suporte a filas FIFO.
Usando o Amazon SQS BufferedAsyncClient
Antes de começar, conclua as etapas em Configurando a Amazon SQS.
Importante
No momento, o AWS SDK for Java 2.x não é compatível com AmazonSQSBufferedAsyncClient
o.
Você pode criar um novo AmazonSQSBufferedAsyncClient
com base em AmazonSQSAsyncClient
, por exemplo:
// Create the basic Amazon SQS async client final AmazonSQSAsync sqsAsync = new AmazonSQSAsyncClient(); // Create the buffered client final AmazonSQSAsync bufferedSqs = new AmazonSQSBufferedAsyncClient(sqsAsync);
Depois de criar o novo AmazonSQSBufferedAsyncClient
, você pode usá-lo para enviar várias solicitações ao Amazon SQS (da mesma forma que faria com o AmazonSQSAsyncClient
), por exemplo:
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);
Configurando o Amazon SQS BufferedAsyncClient
O AmazonSQSBufferedAsyncClient
é pré-configurado com configurações que funcionarão para a maioria dos casos de uso. Você pode configurar ainda mais o AmazonSQSBufferedAsyncClient
, por exemplo:
-
Crie uma instância da classe
QueueBufferConfig
com os parâmetros de configuração necessários. -
Informe a instância para o construtor
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);
Parâmetro | Valor padrão | Descrição |
---|---|---|
longPoll |
true |
Quando |
longPollWaitTimeoutSeconds |
20 s |
A quantidade máxima de tempo, em segundos, em que uma chamada notaQuando a sondagem longa está desativada, essa configuração não tem efeito. |
maxBatchOpenMs |
200ms |
A quantidade máxima de tempo (em milissegundos) que uma chamada de saída aguarda outras chamadas com as quais ela coloca mensagens do mesmo tipo em lote. Quanto maior for a configuração, menos lotes serão necessários para executar a mesma quantidade de trabalho (no entanto, a primeira chamada em um lote deve passar mais tempo em espera). Quando esse parâmetro é definido como |
maxBatchSize |
10 solicitações por lote |
O número máximo de mensagens que são armazenadas em lote em uma única solicitação. Quanto maior a configuração, menos lotes serão necessários para executar o mesmo número de solicitações. notaDez solicitações por lote é o valor máximo permitido para o Amazon SQS. |
maxBatchSizeBytes |
256 KiB |
O tamanho máximo de um lote de mensagens, em bytes, que o cliente tenta enviar ao Amazon SQS. nota256 KiB é o valor máximo permitido para o Amazon SQS. |
maxDoneReceiveBatches |
10 lotes |
O número máximo de lotes de recebimento que Quanto maior for a configuração, mais solicitações de recebimento poderão ser atendidas sem a necessidade de fazer uma chamada ao Amazon SQS (no entanto, quanto mais mensagens forem buscadas previamente, mais tempo elas permanecerão no buffer, fazendo com que o tempo limite de visibilidade expire). nota
|
maxInflightOutboundBatches |
5 lotes |
O número máximo de lotes de saída ativos que podem ser processados ao mesmo tempo. Quanto maior for a configuração, mais rapidamente os lotes de saída poderão ser enviados (sujeito a outras cotas, como CPU ou largura de banda) e mais threads serão consumidos pelo |
maxInflightReceiveBatches |
10 lotes |
O número máximo de lotes de recebimento ativos que podem ser processados ao mesmo tempo. Quanto maior for a configuração, mais mensagens serão recebidas (sujeito a outras cotas, como CPU ou largura de banda) e mais threads serão consumidos pelo nota
|
visibilityTimeoutSeconds |
-1 |
Quando esse parâmetro é definido como um valor positivo e diferente de zero, o tempo limite de visibilidade definido aqui substitui o tempo limite de visibilidade definido na fila a partir da qual as mensagens são consumidas. nota
Não é possível configurar o tempo limite de visibilidade para |