

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Pengelompokan pesan Amazon SNS
<a name="sns-batch-api-actions"></a>

## Apa itu message batching?
<a name="what-is-message-batching"></a>

Alternatif untuk memublikasikan pesan ke topik Standar atau FIFO dalam permintaan `Publish` API individual, adalah menggunakan Amazon `PublishBatch` SNS API untuk mempublikasikan hingga 10 pesan dalam satu permintaan API. Mengirim pesan dalam batch dapat membantu Anda mengurangi biaya yang terkait dengan menghubungkan aplikasi terdistribusi ([pesan A2A](sns-system-to-system-messaging.md)) atau mengirim pemberitahuan kepada orang-orang (pesan [A2P) dengan](sns-user-notifications.md) Amazon SNS dengan faktor hingga 10. Amazon SNS memiliki kuota tentang berapa banyak pesan yang dapat Anda terbitkan ke topik per detik berdasarkan wilayah tempat Anda beroperasi. Lihat halaman [endpoint dan kuota Amazon SNS](https://docs.aws.amazon.com/general/latest/gr/sns.html) di *Referensi Umum AWS*panduan untuk informasi selengkapnya tentang kuota API.

**catatan**  
Ukuran agregat total semua pesan yang Anda kirim dalam satu permintaan `PublishBatch` API tidak dapat melebihi 262.144 byte (256 KiB).  
`PublishBatch`API menggunakan tindakan `Publish` API yang sama untuk kebijakan IAM.

## Bagaimana cara kerja pengelompokan pesan?
<a name="message-batching-how-it-works"></a>

Menerbitkan pesan dengan `PublishBatch` API mirip dengan memublikasikan pesan dengan `Publish` API. Perbedaan utamanya adalah bahwa setiap pesan dalam permintaan `PublishBatch` API harus diberi ID batch unik (hingga 80 karakter). Dengan cara ini, Amazon SNS dapat mengembalikan respons API individual untuk setiap pesan dalam batch untuk mengonfirmasi bahwa setiap pesan telah dipublikasikan atau terjadi kegagalan. Untuk pesan yang dipublikasikan ke topik FIFO, selain menyertakan penetapan ID batch unik, Anda masih perlu menyertakan `MessageDeduplicationID` dan `MessageGroupId` untuk setiap pesan individual.

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

**Menerbitkan kumpulan 10 pesan ke topik Standar**

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

**Menerbitkan kumpulan 10 pesan ke topik FIFO**

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