Amazon SNS メッセージのバッチ処理 - Amazon Simple Notification Service

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon SNS メッセージのバッチ処理

メッセージのバッチ処理とは何ですか。

個別の Publish API リクエストで標準トピックまたは FIFO トピックにメッセージを発行する代わりに、Amazon SNS PublishBatch API を使用して、単一の API リクエストで最大 10 のメッセージを発行します。メッセージをバッチで送信すると、分散アプリケーションの接続 (A2A メッセージング) または Amazon SNS を使用した人への通知の送信 (A2P メッセージング) に関連するコストを最大 10 分の 1 に削減できます。Amazon SNS では、操作するリージョンに基づいて、1 秒間にトピックに発行できるメッセージの数に関するクォータがあります。API クォータの詳細については、「AWS 全般のリファレンス」の「Amazon SNS エンドポイントとクォータ」のページを参照してください。

注記

1 回の PublishBatch API 呼び出しで送信するすべてのメッセージの合計サイズは 262,144 バイト (256 KB) を超えることはできません。

PublishBatch API は、IAM ポリシーの同じ Publish API アクションを使用します。

メッセージのバッチ処理はどのように機能しますか。

Publish API を使用したメッセージの公開は、PublishBatch API を使用したメッセージの公開に似ています。主な違いは、PublishBatch API リクエストでは、各メッセージに一意のバッチ ID(最大 80 文字)を割り当てる必要があります。このようにして、Amazon SNS は、バッチ内のすべてのメッセージに対して個々の API レスポンスを返して、各メッセージが発行されたか、または障害が発生したかを確認できます。FIFO トピックに発行されるメッセージについては、一意のバッチ ID の割り当てに加えて、個々のメッセージごとに MessageDeduplicationID および MessageGroupId を含める必要があります。

10 のメッセージのバッチを標準トピックに公開する

// Imports import com.amazonaws.services.sns.AmazonSNS; import com.amazonaws.services.sns.model.PublishBatchRequest; import com.amazonaws.services.sns.model.PublishBatchRequestEntry; import com.amazonaws.services.sns.model.PublishBatchResult; import com.amazonaws.services.sns.model.AmazonSNSException; import java.util.List; import java.util.stream.Collectors; // Code private static final int MAX_BATCH_SIZE = 10; public static void publishBatchToTopic(AmazonSNS snsClient, String topicArn) { try { // Create the batch entries to send List<PublishBatchRequestEntry> entries = IntStream.range(0, MAX_BATCH_SIZE) .mapToObj(i -> new PublishBatchRequestEntry() .withId("id" + i) .withMessage("message" + i)) .collect(Collectors.toList()); // Create the batch request PublishBatchRequest request = new PublishBatchRequest() .withTopicArn(topicArn) .withPublishBatchRequestEntries(entries); // Publish the batch request PublishBatchResult publishBatchResult = snsClient.publishBatch(request); // Handle the successfully sent messages publishBatchResult.getSuccessful().forEach(publishBatchResultEntry -> { System.out.println("Batch Id for successful message: " + publishBatchResultEntry.getId()); System.out.println("Message Id for successful message: " + publishBatchResultEntry.getMessageId()); }); // Handle the failed messages publishBatchResult.getFailed().forEach(batchResultErrorEntry -> { System.out.println("Batch Id for failed message: " + batchResultErrorEntry.getId()); System.out.println("Error Code for failed message: " + batchResultErrorEntry.getCode()); System.out.println("Sender Fault for failed message: " + batchResultErrorEntry.getSenderFault()); System.out.println("Failure Message for failed message: " + batchResultErrorEntry.getMessage()); }); } catch (AmazonSNSException e) { // Handle any exceptions from the request System.err.println(e.getMessage()); System.exit(1); } }

10 のメッセージのバッチを FIFO トピックに公開する

// Imports import com.amazonaws.services.sns.AmazonSNS; import com.amazonaws.services.sns.model.PublishBatchRequest; import com.amazonaws.services.sns.model.PublishBatchRequestEntry; import com.amazonaws.services.sns.model.PublishBatchResult; import com.amazonaws.services.sns.model.AmazonSNSException; import java.util.List; import java.util.stream.Collectors; // Code private static final int MAX_BATCH_SIZE = 10; public static void publishBatchToFifoTopic(AmazonSNS snsClient, String topicArn) { try { // Create the batch entries to send List<PublishBatchRequestEntry> entries = IntStream.range(0, MAX_BATCH_SIZE) .mapToObj(i -> new PublishBatchRequestEntry() .withId("id" + i) .withMessage("message" + i) .withMessageGroupId("groupId") .withMessageDeduplicationId("deduplicationId" + i)) .collect(Collectors.toList()); // Create the batch request PublishBatchRequest request = new PublishBatchRequest() .withTopicArn(topicArn) .withPublishBatchRequestEntries(entries); // Publish the batch request PublishBatchResult publishBatchResult = snsClient.publishBatch(request); // Handle the successfully sent messages publishBatchResult.getSuccessful().forEach(publishBatchResultEntry -> { System.out.println("Batch Id for successful message: " + publishBatchResultEntry.getId()); System.out.println("Message Id for successful message: " + publishBatchResultEntry.getMessageId()); System.out.println("SequenceNumber for successful message: " + publishBatchResultEntry.getSequenceNumber()); }); // Handle the failed messages publishBatchResult.getFailed().forEach(batchResultErrorEntry -> { System.out.println("Batch Id for failed message: " + batchResultErrorEntry.getId()); System.out.println("Error Code for failed message: " + batchResultErrorEntry.getCode()); System.out.println("Sender Fault for failed message: " + batchResultErrorEntry.getSenderFault()); System.out.println("Failure Message for failed message: " + batchResultErrorEntry.getMessage()); }); } catch (AmazonSNSException e) { // Handle any exceptions from the request System.err.println(e.getMessage()); System.exit(1); } }