Habilitando o buffer do lado do cliente e o agrupamento de solicitações com o Amazon SQS - Amazon Simple Queue Service

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 Java inclui o AmazonSQSBufferedAsyncClient, 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:

  1. Crie uma instância da classe QueueBufferConfig com os parâmetros de configuração necessários.

  2. 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);
QueueBufferConfig parâmetros de configuração
Parâmetro Valor padrão Descrição
longPoll true

Quando longPoll está definido como true, AmazonSQSBufferedAsyncClient tenta usar a sondagem longa ao consumir mensagens.

longPollWaitTimeoutSeconds 20 s

A quantidade máxima de tempo, em segundos, em que uma chamada ReceiveMessage é bloqueada no servidor aguardando as mensagens aparecerem na fila antes de retornar com um resultado de recebimento vazio.

nota

Quando 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 0, as solicitações enviadas não aguardam outras solicitações, desativando efetivamente o processamento em lotes.

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.

nota

Dez 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.

nota

256 KiB é o valor máximo permitido para o Amazon SQS.

maxDoneReceiveBatches 10 lotes

O número máximo de lotes de recebimento que AmazonSQSBufferedAsyncClient pré-busca e armazena no lado do cliente.

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

0indica que toda a pré-busca de mensagens está desativada e que as mensagens são consumidas somente sob demanda.

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 AmazonSQSBufferedAsyncClient.

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 AmazonSQSBufferedAsyncClient.

nota

0indica que toda a pré-busca de mensagens está desativada e que as mensagens são consumidas somente sob demanda.

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

-1 indica que a configuração padrão foi selecionada para a fila.

Não é possível configurar o tempo limite de visibilidade para 0.