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á.
Use o agrupamento automático de solicitações para a Amazon SQS com o AWS SDK for Java 2.x
O Automatic Request Batching API for Amazon SQS é uma biblioteca de alto nível que fornece uma maneira eficiente de agrupar e armazenar em buffer as solicitações de operações. SQS Ao usar o agrupamento em lotesAPI, você reduz o número de solicitaçõesSQS, o que melhora a produtividade e minimiza os custos.
Como os API métodos em lote correspondem aos SqsAsyncClient
métodos—sendMessage
,, changeMessageVisibility
deleteMessage
, receiveMessage
—você pode usar o lote API como um substituto imediato com o mínimo de alterações.
Este tópico fornece uma visão geral de como configurar e trabalhar com o envio automático de solicitações em lotes API para a AmazonSQS.
Confira os pré-requisitos
Você precisa usar a versão 2.28.0 ou posterior do SDK for Java 2.x para ter acesso ao lote. API Seu Maven pom.xml
deve conter pelo menos os seguintes elementos.
<dependencyManagement>
<dependencies>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>bom</artifactId>
<version>2.28.231
</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>sqs</artifactId>
</dependency>
</dependencies>
Crie um gerenciador de lotes
O agrupamento automático de solicitações API é implementado pela SqsAsyncBatchManager
1. Configuração padrão usando SqsAsyncClient
A maneira mais simples de criar um gerenciador de lotes é chamar o método de batchManager
fábrica em uma SqsAsyncClient
SqsAsyncClient asyncClient = SqsAsyncClient.create(); SqsAsyncBatchManager sqsAsyncBatchManager = asyncClient.batchManager();
Quando você usa essa abordagem, a SqsAsyncBatchManager
instância usa os valores padrão que são mostrados na tabela na Substituir configurações para SqsAsyncBatchManager seção. Além disso, a SqsAsyncBatchManager
instância usa a SqsAsyncClient
instância ExecutorService
da qual foi criada.
1. Configuração personalizada usando SqsAsyncBatchManager.Builder
Para casos de uso mais avançados, você pode personalizar o gerenciador de lotes usando SqsAsyncBatchManager.Builder
SqsAsyncBatchManager
instância, você pode ajustar o comportamento do agrupamento em lotes. O trecho a seguir mostra um exemplo de como usar o construtor para personalizar o comportamento em lote.
SqsAsyncBatchManager batchManager = SqsAsyncBatchManager.builder() .client(SqsAsyncClient.create()) .scheduledExecutor(Executors.newScheduledThreadPool(5)) .overrideConfiguration(b -> b .receiveMessageMinWaitDuration(Duration.ofSeconds(10)) .receiveMessageVisibilityTimeout(Duration.ofSeconds(1)) .receiveMessageAttributeNames(Collections.singletonList("*")) .receiveMessageSystemAttributeNames(Collections.singletonList(MessageSystemAttributeName.ALL))) .build();
Ao usar essa abordagem, você pode ajustar as configurações do BatchOverrideConfiguration
objeto que são mostradas na tabela na Substituir configurações para SqsAsyncBatchManager seção. Você também pode fornecer uma personalização ScheduledExecutorService
Enviar mensagens
Para enviar mensagens com o gerenciador de lotes, use o SqsAsyncBatchManager#sendMessage
método. O SDK buffer solicita e as envia em lote quando os sendRequestFrequency
valores maxBatchSize
ou são atingidos.
O exemplo a seguir mostra uma sendMessage
solicitação imediatamente seguida por outra solicitação. Nesse caso, o SDK envia as duas mensagens em um único lote.
// Sending the first message CompletableFuture<SendMessageResponse> futureOne = sqsAsyncBatchManager.sendMessage(r -> r.messageBody("One").queueUrl("queue")); // Sending the second message CompletableFuture<SendMessageResponse> futureTwo = sqsAsyncBatchManager.sendMessage(r -> r.messageBody("Two").queueUrl("queue")); // Waiting for both futures to complete and retrieving the responses SendMessageResponse messageOne = futureOne.join(); SendMessageResponse messageTwo = futureTwo.join();
Alterar o tempo limite de visibilidade da mensagem
Você pode alterar o tempo limite de visibilidade das mensagens em um lote usando o SqsAsyncBatchManager#changeMessageVisibility
sendRequestFrequency
valores maxBatchSize
ou são atingidos.
O exemplo a seguir mostra como chamar o changeMessageVisibility
método.
CompletableFuture<ChangeMessageVisibilityResponse> futureOne = sqsAsyncBatchManager.changeMessageVisibility(r -> r.receiptHandle("receiptHandle") .queueUrl("queue")); ChangeMessageVisibilityResponse response = futureOne.join();
Exclua mensagens
Você pode excluir mensagens em um lote usando o SqsAsyncBatchManager#deleteMessage
sendRequestFrequency
valores maxBatchSize
ou são atingidos.
O exemplo a seguir mostra como você pode chamar o deleteMessage
método.
CompletableFuture<DeleteMessageResponse> futureOne = sqsAsyncBatchManager.deleteMessage(r -> r.receiptHandle("receiptHandle") .queueUrl("queue")); DeleteMessageResponse response = futureOne.join();
Receba mensagens
Usar configurações padrão
Quando você pesquisa o SqsAsyncBatchManager#receiveMessage
método em seu aplicativo, o gerenciador de lotes busca mensagens de seu buffer interno, que SDK são atualizadas automaticamente em segundo plano.
O exemplo a seguir mostra como chamar o receiveMessage
método.
CompletableFuture<ReceiveMessageResponse> responseFuture = sqsAsyncBatchManager.receiveMessage(r -> r.queueUrl("queueUrl"));
Use configurações personalizadas
Se quiser personalizar ainda mais a solicitação, por exemplo, definindo tempos de espera personalizados e especificando o número de mensagens a serem recuperadas, você pode personalizar a solicitação conforme mostrado no exemplo a seguir.
CompletableFuture<ReceiveMessageResponse> response = sqsAsyncBatchManager.receiveMessage(r -> r.queueUrl("queueUrl") .waitTimeSeconds(5) .visibilityTimeout(20));
nota
Se você chamar receiveMessage
com um ReceiveMessageRequest
que inclua qualquer um dos parâmetros a seguir, SDK ele ignorará o gerenciador de lotes e enviará uma solicitação receiveMessage
assíncrona regular:
-
messageAttributeNames
-
messageSystemAttributeNames
-
messageSystemAttributeNamesWithStrings
-
overrideConfiguration
Substituir configurações para SqsAsyncBatchManager
Você pode ajustar as configurações a seguir ao criar uma SqsAsyncBatchManager
instância. A lista de configurações a seguir está disponível no BatchOverrideConfiguration.Builder
Configuração | Descrição | Valor padrão |
---|---|---|
maxBatchSize |
Número máximo de solicitações por lote para cadaSendMessageBatchRequest ,ChangeMessageVisibilityBatchRequest , ouDeleteMessageBatchRequest . O valor máximo é 10. |
10 |
sendRequestFrequency |
Tempo antes do envio de um lote, a menos que |
200 ms |
receiveMessageVisibilityTimeout |
Tempo limite de visibilidade para mensagens. Se não for definido, o padrão da fila será usado. | Padrão da fila |
receiveMessageMinWaitDuration |
Tempo mínimo de espera para receiveMessage solicitações. Evite definir como 0 para evitar CPU desperdício. |
50 ms |
receiveMessageSystemAttributeNames |
Lista de nomes de atributos do sistemareceiveMessage chamadas. |
Nenhum |
receiveMessageAttributeNames |
Lista de nomes de atributos para solicitar receiveMessage chamadas. |
Nenhum |