Verwenden Sie die automatische Batchverarbeitung von Anfragen für Amazon SQS mit dem AWS SDK for Java 2.x - AWS SDK for Java 2.x

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Verwenden Sie die automatische Batchverarbeitung von Anfragen für Amazon SQS mit dem AWS SDK for Java 2.x

Automatic Request Batching API for Amazon SQS ist eine umfangreiche Bibliothek, die eine effiziente Möglichkeit bietet, Anfragen für SQS Operationen zu stapeln und zu puffern. Durch die Verwendung von Batching API reduzieren Sie die Anzahl der AnfragenSQS, was den Durchsatz verbessert und die Kosten minimiert.

Da die API Batch-Methoden mit den SqsAsyncClient Methoden—sendMessage,,, receiveMessage —übereinstimmen changeMessageVisibilitydeleteMessage, können Sie den Batch mit minimalen Änderungen API als Drop-In-Ersatz verwenden.

Dieses Thema gibt Ihnen einen Überblick über die Konfiguration und Verwendung von Automatic Request Batching API für AmazonSQS.

Prüfen Sie die Voraussetzungen

Sie müssen Version 2.28.0 oder höher von SDK für Java 2.x verwenden, um auf das Batching zugreifen zu können. API Ihr Maven pom.xml sollte mindestens die folgenden Elemente enthalten.

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

1 Letzte Version

Erstellen Sie einen Batch-Manager

Das automatische Batching von Anfragen API wird von der SqsAsyncBatchManagerSchnittstelle implementiert. Sie können eine Instanz des Managers auf verschiedene Arten erstellen.

Standardkonfiguration mithilfe von SqsAsyncClient

Die einfachste Methode zum Erstellen eines Batch-Managers besteht darin, die batchManager Factory-Methode für eine vorhandene SqsAsyncClientInstanz aufzurufen. Der einfache Ansatz wird im folgenden Snippet gezeigt.

SqsAsyncClient asyncClient = SqsAsyncClient.create(); SqsAsyncBatchManager sqsAsyncBatchManager = asyncClient.batchManager();

Wenn Sie diesen Ansatz verwenden, verwendet die SqsAsyncBatchManager Instanz die Standardwerte, die in der Tabelle im Überschreiben Sie die Konfigurationseinstellungen für SqsAsyncBatchManager Abschnitt aufgeführt sind. Darüber hinaus verwendet die SqsAsyncBatchManager Instanz die ExecutorService der SqsAsyncClient Instanz, aus der sie erstellt wurde.

Benutzerdefinierte Konfiguration mithilfe von SqsAsyncBatchManager.Builder

Für fortgeschrittenere Anwendungsfälle können Sie den Batch-Manager mithilfe von anpassen SqsAsyncBatchManager.Builder. Wenn Sie diesen Ansatz verwenden, um eine SqsAsyncBatchManager Instanz zu erstellen, können Sie das Batching-Verhalten fein abstimmen. Der folgende Ausschnitt zeigt ein Beispiel dafür, wie Sie den Builder verwenden können, um das Batching-Verhalten anzupassen.

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();

Wenn Sie diesen Ansatz verwenden, können Sie die Einstellungen für das BatchOverrideConfiguration Objekt anpassen, die in der Tabelle im Abschnitt aufgeführt sind. Überschreiben Sie die Konfigurationseinstellungen für SqsAsyncBatchManager Mit diesem Ansatz können Sie auch einen benutzerdefinierten Wert ScheduledExecutorServicefür den Batch-Manager angeben.

Senden Sie Nachrichten

Verwenden Sie die SqsAsyncBatchManager#sendMessage Methode, um Nachrichten mit dem Batch-Manager zu senden. Die SDK Methode puffert Anfragen und sendet sie als Batch, wenn die sendRequestFrequency Werte maxBatchSize oder erreicht sind.

Das folgende Beispiel zeigt eine sendMessage Anfrage, auf die unmittelbar eine weitere Anfrage folgt. In diesem Fall SDK sendet der beide Nachrichten in einem einzigen Batch.

// 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();

Ändern Sie das Timeout für die Sichtbarkeit von Nachrichten

Sie können das Sichtbarkeits-Timeout von Nachrichten in einem Batch mithilfe der SqsAsyncBatchManager#changeMessageVisibilityMethode ändern. Die SDK Methode puffert Anfragen und sendet sie als Batch, wenn die sendRequestFrequency Werte maxBatchSize oder erreicht sind.

Das folgende Beispiel zeigt, wie die changeMessageVisibility Methode aufgerufen wird.

CompletableFuture<ChangeMessageVisibilityResponse> futureOne = sqsAsyncBatchManager.changeMessageVisibility(r -> r.receiptHandle("receiptHandle") .queueUrl("queue")); ChangeMessageVisibilityResponse response = futureOne.join();

Nachrichten löschen

Mit SqsAsyncBatchManager#deleteMessagedieser Methode können Sie Nachrichten stapelweise löschen. Die SDK Methode puffert Anfragen und sendet sie als Batch, wenn die sendRequestFrequency Werte maxBatchSize oder erreicht sind.

Das folgende Beispiel zeigt, wie Sie die deleteMessage Methode aufrufen können.

CompletableFuture<DeleteMessageResponse> futureOne = sqsAsyncBatchManager.deleteMessage(r -> r.receiptHandle("receiptHandle") .queueUrl("queue")); DeleteMessageResponse response = futureOne.join();

Empfangen Sie Nachrichten

Verwenden Sie die Standardeinstellungen

Wenn Sie die SqsAsyncBatchManager#receiveMessage Methode in Ihrer Anwendung abfragen, ruft der Batch-Manager Nachrichten aus seinem internen Puffer ab, der dann SDK automatisch im Hintergrund aktualisiert wird.

Das folgende Beispiel zeigt, wie die receiveMessage Methode aufgerufen wird.

CompletableFuture<ReceiveMessageResponse> responseFuture = sqsAsyncBatchManager.receiveMessage(r -> r.queueUrl("queueUrl"));

Verwenden Sie benutzerdefinierte Einstellungen

Wenn Sie die Anfrage weiter anpassen möchten, indem Sie beispielsweise benutzerdefinierte Wartezeiten festlegen und die Anzahl der abzurufenden Nachrichten angeben, können Sie die Anforderung wie im folgenden Beispiel dargestellt anpassen.

CompletableFuture<ReceiveMessageResponse> response = sqsAsyncBatchManager.receiveMessage(r -> r.queueUrl("queueUrl") .waitTimeSeconds(5) .visibilityTimeout(20));
Anmerkung

Wenn Sie receiveMessage mit einer aufrufenReceiveMessageRequest, die einen der folgenden Parameter enthält, wird der Batch-Manager SDK umgangen und es wird eine reguläre asynchrone receiveMessage Anfrage gesendet:

  • messageAttributeNames

  • messageSystemAttributeNames

  • messageSystemAttributeNamesWithStrings

  • overrideConfiguration

Überschreiben Sie die Konfigurationseinstellungen für SqsAsyncBatchManager

Sie können die folgenden Einstellungen anpassen, wenn Sie eine SqsAsyncBatchManager Instanz erstellen. Die folgende Liste von Einstellungen ist auf der verfügbar BatchOverrideConfiguration.Builder.

Einstellung Beschreibung Standardwert
maxBatchSize Maximale Anzahl von Anfragen pro Stapel für jedesSendMessageBatchRequest,ChangeMessageVisibilityBatchRequest, oderDeleteMessageBatchRequest. Der Höchstwert ist 10. 10
sendRequestFrequency

Zeit bis zum Senden eines Batches, sofern sie nicht maxBatchSize früher erreicht wurde. Höhere Werte können die Anzahl der Anfragen reduzieren, aber die Latenz erhöhen.

200 ms
receiveMessageVisibilityTimeout Timeout für die Sichtbarkeit von Nachrichten. Wenn diese Option nicht gesetzt ist, wird die Standardeinstellung der Warteschlange verwendet. Die Standardeinstellung der Warteschlange
receiveMessageMinWaitDuration Minimale Wartezeit für receiveMessage Anfragen. Vermeiden Sie es, auf 0 zu setzen, um CPU Verschwendung zu vermeiden. 50 ms
receiveMessageSystemAttributeNames Liste der Systemattributnamen, die für receiveMessage Anrufe angefordert werden sollen. None
receiveMessageAttributeNames Liste der Attributnamen, die für receiveMessage Anrufe angefordert werden sollen. None