Compartilhamento de SNS mensagens da Amazon - Amazon Simple Notification Service

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

Compartilhamento de SNS mensagens da Amazon

O que é o agrupamento de mensagens em lotes?

Uma alternativa à publicação de mensagens no formato Padrão ou em FIFO tópicos em Publish API solicitações individuais é usar a Amazon SNS PublishBatch API para publicar até 10 mensagens em uma única API solicitação. O envio de mensagens em lotes pode ajudá-lo a reduzir os custos associados à conexão de aplicativos distribuídos (mensagens A2A) ou ao envio de notificações para pessoas (mensagens A2P) com a Amazon em um fator de SNS até 10. SNSA Amazon tem cotas de quantas mensagens você pode publicar em um tópico por segundo, com base na região em que você opera. Consulte a página de SNSendpoints e cotas da Amazon no Referência geral da AWSguia para obter mais informações sobre API cotas.

nota

O tamanho total agregado de todas as mensagens enviadas em uma única PublishBatch API solicitação não pode exceder 262.144 bytes (256 KB).

O PublishBatch API usa a mesma Publish API ação para IAM políticas.

Como funciona o agrupamento de mensagens em lotes?

Publicar mensagens com o PublishBatch API é semelhante à publicação de mensagens com Publish API o. A principal diferença é que cada mensagem em uma PublishBatch API solicitação precisa receber uma ID de lote exclusiva (até 80 caracteres). Dessa forma, a Amazon SNS pode retornar API respostas individuais para cada mensagem em um lote para confirmar que cada mensagem foi publicada ou que ocorreu uma falha. Para mensagens publicadas em FIFO tópicos, além de incluir a atribuição de uma ID de lote exclusiva, você ainda precisa incluir um MessageDeduplicationID e MessageGroupId para cada mensagem individual.

Exemplos

Publicar um lote de 10 mensagens em um FIFO tópico

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

Publicar um lote de 10 mensagens em um FIFO tópico

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