

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.

# Batch-Messaging in Amazon SNS
<a name="sns-batch-api-actions"></a>

## Was ist Batch-Messaging?
<a name="what-is-message-batching"></a>

Eine Alternative zur Veröffentlichung von Nachrichten in Standard- oder FIFO-Themen in einzelnen `Publish` API-Anfragen ist die Verwendung der Amazon SNS `PublishBatch`-API, um bis zu 10 Nachrichten in einer einzigen API-Anfrage zu veröffentlichen. Durch das Versenden von Nachrichten in Batches können Sie die Kosten, die mit der Verbindung von verteilten Anwendungen ([A2A-Messaging](sns-system-to-system-messaging.md)) oder dem Senden von Benachrichtigungen an Personen ([A2P-Messaging](sns-user-notifications.md)) mit Amazon SNS verbunden sind, bis zu einem Faktor von 10 reduzieren. Amazon SNS verfügt über Kontingente, wie viele Nachrichten Sie je nach Region, in der Sie tätig sind, für ein Thema pro Sekunde veröffentlichen können. Sehen Sie sich die Seite [Amazon-SNS-Endpunkte und -Kontingente](https://docs.aws.amazon.com/general/latest/gr/sns.html) im *Allgemeine AWS-Referenz*-Leitfaden an, um weitere Informationen zu API-Kontingenten zu erhalten.

**Anmerkung**  
Die Gesamtgröße aller Nachrichten, die Sie in einer einzigen `PublishBatch` API-Anfrage senden, darf 262.144 Byte (256 KiB) nicht überschreiten.  
Die `PublishBatch`-API verwendet dieselbe `Publish`-API-Aktion für IAM-Richtlinien.

## Wie funktioniert Batch-Messaging?
<a name="message-batching-how-it-works"></a>

Das Veröffentlichen von Nachrichten mit der `PublishBatch`-API ähnelt dem Veröffentlichen von Nachrichten mit der `Publish`-API. Der Hauptunterschied besteht darin, dass jeder Nachricht innerhalb einer `PublishBatch`-API-Anfrage eine eindeutige Batch-ID (bis zu 80 Zeichen) zugewiesen werden muss. Auf diese Weise kann Amazon SNS individuelle API-Antworten für jede Nachricht innerhalb eines Batches zurückgeben, um zu bestätigen, dass jede Nachricht entweder veröffentlicht wurde oder dass ein Fehler aufgetreten ist. Für Nachrichten, die in FIFO-Themen veröffentlicht werden, müssen Sie zusätzlich zur Zuweisung einer eindeutigen Batch-ID noch eine `MessageDeduplicationID` und `MessageGroupId` für jede einzelne Nachricht zuweisen.

## Beispiele
<a name="message-batching-examples"></a>

**Veröffentlichen eines Batches von 10 Nachrichten in einem Standardthema**

```
// Imports
import software.amazon.awssdk.services.sns.SnsClient;
import software.amazon.awssdk.services.sns.model.PublishBatchRequest;
import software.amazon.awssdk.services.sns.model.PublishBatchRequestEntry;
import software.amazon.awssdk.services.sns.model.PublishBatchResponse;
import software.amazon.awssdk.services.sns.model.SnsException;

import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

// Code
private static final int MAX_BATCH_SIZE = 10;

public static void publishBatchToTopic(SnsClient snsClient, String topicArn, int batchSize) {
    try {
        // Validate the batch size
        if (batchSize > MAX_BATCH_SIZE) {
            throw new IllegalArgumentException("Batch size cannot exceed " + MAX_BATCH_SIZE);
        }

        // Create the batch entries
        List<PublishBatchRequestEntry> entries = IntStream.range(0, batchSize)
                .mapToObj(i -> PublishBatchRequestEntry.builder()
                        .id("id" + i)
                        .message("message" + i)
                        .build())
                .collect(Collectors.toList());

        // Build the batch request
        PublishBatchRequest request = PublishBatchRequest.builder()
                .topicArn(topicArn)
                .publishBatchRequestEntries(entries)
                .build();

        // Publish the batch request
        PublishBatchResponse response = snsClient.publishBatch(request);

        // Handle successful messages
        response.successful().forEach(success -> {
            System.out.println("Successful Batch Id: " + success.id());
            System.out.println("Message Id: " + success.messageId());
        });

        // Handle failed messages
        response.failed().forEach(failure -> {
            System.err.println("Failed Batch Id: " + failure.id());
            System.err.println("Error Code: " + failure.code());
            System.err.println("Sender Fault: " + failure.senderFault());
            System.err.println("Error Message: " + failure.message());
        });

    } catch (SnsException e) {
        // Log and handle exceptions
        System.err.println("SNS Exception: " + e.awsErrorDetails().errorMessage());
    } catch (IllegalArgumentException e) {
        System.err.println("Validation Error: " + e.getMessage());
    }
}
```

**Veröffentlichen eines Batches von 10 Nachrichten in einem FIFO-Thema**

```
// Imports
import software.amazon.awssdk.services.sns.SnsClient;
import software.amazon.awssdk.services.sns.model.PublishBatchRequest;
import software.amazon.awssdk.services.sns.model.PublishBatchRequestEntry;
import software.amazon.awssdk.services.sns.model.PublishBatchResponse;
import software.amazon.awssdk.services.sns.model.BatchResultErrorEntry;
import software.amazon.awssdk.services.sns.model.SnsException;

import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

// Code
private static final int MAX_BATCH_SIZE = 10;

public static void publishBatchToFifoTopic(SnsClient snsClient, String topicArn) {
    try {
        // Create the batch entries to send
        List<PublishBatchRequestEntry> entries = IntStream.range(0, MAX_BATCH_SIZE)
                .mapToObj(i -> PublishBatchRequestEntry.builder()
                        .id("id" + i)
                        .message("message" + i)
                        .messageGroupId("groupId")
                        .messageDeduplicationId("deduplicationId" + i)
                        .build())
                .collect(Collectors.toList());

        // Create the batch request
        PublishBatchRequest request = PublishBatchRequest.builder()
                .topicArn(topicArn)
                .publishBatchRequestEntries(entries)
                .build();

        // Publish the batch request
        PublishBatchResponse response = snsClient.publishBatch(request);

        // Handle the successfully sent messages
        response.successful().forEach(success -> {
            System.out.println("Batch Id for successful message: " + success.id());
            System.out.println("Message Id for successful message: " + success.messageId());
            System.out.println("Sequence Number for successful message: " + success.sequenceNumber());
        });

        // Handle the failed messages
        response.failed().forEach(failure -> {
            System.err.println("Batch Id for failed message: " + failure.id());
            System.err.println("Error Code for failed message: " + failure.code());
            System.err.println("Sender Fault for failed message: " + failure.senderFault());
            System.err.println("Failure Message for failed message: " + failure.message());
        });

    } catch (SnsException e) {
        // Handle any exceptions from the request
        System.err.println("SNS Exception: " + e.awsErrorDetails().errorMessage());
    }
}
```