Procesamiento por lotes de SNS mensajes de Amazon - Amazon Simple Notification Service

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Procesamiento por lotes de SNS mensajes de Amazon

¿Qué es la agrupación en lotes de mensajes?

Una alternativa a la publicación de mensajes en formato Estándar o en FIFO temas en Publish API solicitudes individuales es usar Amazon SNS PublishBatch API para publicar hasta 10 mensajes en una sola API solicitud. El envío de mensajes por lotes puede ayudarte a reducir hasta 10 veces los costes asociados a la conexión de aplicaciones distribuidas (mensajería A2A) o al envío de notificaciones a personas (mensajería A2P) con AmazonSNS. Amazon SNS establece límites sobre el número de mensajes que puedes publicar en un tema por segundo en función de la región en la que operes. Consulta la página de SNSpuntos finales y cuotas de Amazon en la Referencia general de AWSguía para obtener más información sobre API las cuotas.

nota

El tamaño total total de todos los mensajes que envíes en una sola PublishBatch API solicitud no puede superar los 262.144 bytes (256 KB).

PublishBatchAPIUtiliza la misma Publish API acción para IAM las políticas.

¿Cómo funciona la agrupación en lotes de mensajes?

Publicar mensajes con el PublishBatch API es similar a publicar mensajes con PublishAPI. La principal diferencia es que a cada mensaje de una PublishBatch API solicitud se le debe asignar un identificador de lote único (hasta 80 caracteres). De esta forma, Amazon SNS puede devolver API respuestas individuales para cada mensaje de un lote para confirmar que cada mensaje se publicó o que se produjo un error. En el caso de los mensajes que se publiquen en FIFO temas, además de incluir la asignación de un identificador de lote único, tendrás que incluir una MessageDeduplicationID y MessageGroupId para cada mensaje individual.

Ejemplos

Publicar un lote de 10 mensajes en un tema 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 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 un lote de 10 mensajes en un FIFO tema

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