Tutorial: Publicación de un mensaje con atributos en un tema de Amazon SNS - Amazon Simple Notification Service

Tutorial: Publicación de un mensaje con atributos en un tema de Amazon SNS

Después de crear un tema y suscribir un punto de enlace a este, puede publicar mensajes en el tema con los atributos de mensajes, que le permiten proporcionar elementos de metadatos de estructura sobre el mensaje. Para obtener más información, consulte Atributos de mensajes de Amazon SNS.

En el siguiente tutorial se muestra cómo puede utilizar la Consola de administración de AWS, AWS SDK for Java y AWS SDK para .NET para publicar un mensaje en un tema.

Para publicar un mensaje con atributos en un tema de Amazon SNS mediante la Consola de administración de AWS

Para obtener instrucciones detalladas sobre cómo publicar un mensaje con atributos en un tema de Amazon SNS mediante la Consola de administración de AWS, consulte Para publicar un mensaje en un tema de Amazon SNS mediante la Consola de administración de AWS.

Para publicar un mensaje con atributos en un tema de Amazon SNS mediante la AWS SDK for Java

  1. Especifique sus credenciales de AWS. Para obtener más información, consulte Configuración de credenciales y regiones de AWS para desarrollo en la Guía para desarrolladores de AWS SDK para Java 2.x.

  2. Escriba su código. Para obtener más información, consulte Uso de SDK para Java 2.x.

    El ejemplo de código siguiente ayuda a simplificar el proceso de publicación de mensajes con atributos. La clase SNSMessageAttributes almacena el campo messageAttributes como una asignación. Puede utilizar el método addAttribute sobrecargado para añadir atributos con los tipos de datos String, String.Array y Number. Para publicar el mensaje, proporcione el cliente AmazonSNS y el ARN del tema para utilizar el método publish.

    import com.amazonaws.services.sns.AmazonSNS; import com.amazonaws.services.sns.model.MessageAttributeValue; import com.amazonaws.services.sns.model.PublishRequest; import com.amazonaws.services.sns.model.PublishResult; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import java.util.stream.Collectors; public class SNSMessageAttributes { private String message; private Map<String, MessageAttributeValue> messageAttributes; public SNSMessageAttributes(final String message) { this.message = message; messageAttributes = new HashMap<>(); } public String getMessage() { return message; } public void setMessage(final String message) { this.message = message; } public void addAttribute(final String attributeName, final String attributeValue) { final MessageAttributeValue messageAttributeValue = new MessageAttributeValue() .withDataType("String") .withStringValue(attributeValue); messageAttributes.put(attributeName, messageAttributeValue); } public void addAttribute(final String attributeName, final ArrayList<?> attributeValues) { String valuesString, delimiter = ", ", prefix = "[", suffix = "]"; if (attributeValues.get(0).getClass() == String.class) { delimiter = "\", \""; prefix = "[\""; suffix = "\"]"; } valuesString = attributeValues .stream() .map(Object::toString) .collect(Collectors.joining(delimiter, prefix, suffix)); final MessageAttributeValue messageAttributeValue = new MessageAttributeValue() .withDataType("String.Array") .withStringValue(valuesString); messageAttributes.put(attributeName, messageAttributeValue); } public void addAttribute(final String attributeName, final Number attributeValue) { final MessageAttributeValue messageAttributeValue = new MessageAttributeValue() .withDataType("Number") .withStringValue(attributeValue.toString()); messageAttributes.put(attributeName, messageAttributeValue); } public String publish(final AmazonSNS snsClient, final String topicArn) { final PublishRequest request = new PublishRequest(topicArn, message) .withMessageAttributes(messageAttributes); final PublishResult result = snsClient.publish(request); return result.getMessageId(); } }

    El siguiente fragmento de código inicializa y utiliza la clase SNSMessageAttributes de ejemplo.

    // Initialize the example class. final SNSMessageAttributes message = new SNSMessageAttributes(messageBody); // Add message attributes with string values. message.addAttribute("store", "example_corp"); message.addAttribute("event", "order_placed"); // Add a message attribute with a list of string values. final ArrayList<String> interestsValues = new ArrayList<String>(); interestsValues.add("soccer"); interestsValues.add("rugby"); interestsValues.add("hockey"); message.addAttribute("customer_interests", interestsValues); // Add a message attribute with a numeric value. message.addAttribute("price_usd", 1000); // Add a Boolean attribute for filtering using subscription filter policies. // The class applies the String.Array data type to this attribute, allowing it // to be evaluated by a filter policy. final ArrayList<Boolean> encryptedVal = new ArrayList<Boolean>(); encryptedVal.add(false); message.addAttribute("encrypted", encryptedVal); // Publish the message. message.publish(snsClient, topicArn); // Print the MessageId of the message. System.out.println("MessageId: " + publishResponse.getMessageId());
  3. Compile y ejecute el código.

    El mensaje se publica y se imprime MessageId, por ejemplo:

    MessageId: 1234a567-bc89-012d-3e45-6fg7h890123i

Para publicar un mensaje con atributos en un tema de Amazon SNS mediante la AWS SDK para .NET

  1. Especifique sus credenciales de AWS. Para obtener más información, consulte Configuración de credenciales de AWS en la AWS SDK para .NET Developer Guide.

  2. Escriba su código. Para obtener más información, Programación con AWS SDK para .NET.

  3. El ejemplo de código siguiente ayuda a simplificar el proceso de publicación de mensajes con atributos. La clase SNSMessageAttributes almacena el campo MessageAttributes como diccionario. Puede utilizar el método addAttribute sobrecargado para añadir atributos con los tipos de datos String, String.Array y Number. Para publicar el mensaje, proporcione el cliente AmazonSimpleNotificationServiceClient y el ARN del tema para utilizar el método publish.

    using System; using System.Collections.Generic; using Amazon.SimpleNotificationService; using Amazon.SimpleNotificationService.Model; namespace SNSCreatePlatformEndpoint { class SNSMessageAttributes { private String message; private Dictionary<String, MessageAttributeValue> messageAttributes; public SNSMessageAttributes(String message) { this.message = message; messageAttributes = new Dictionary<string, MessageAttributeValue>(); } public string Message { get => this.message; set => this.message = value; } public void AddAttribute(String attributeName, String attributeValue) { messageAttributes[attributeName] = new MessageAttributeValue { DataType = "String", StringValue = attributeValue }; } public void AddAttribute(String attributeName, float attributeValue) { messageAttributes[attributeName] = new MessageAttributeValue { DataType = "Number", StringValue = attributeValue.ToString() }; } public void AddAttribute(String attributeName, int attributeValue) { messageAttributes[attributeName] = new MessageAttributeValue { DataType = "Number", StringValue = attributeValue.ToString() }; } public void AddAttribute(String attributeName, List<String> attributeValue) { String valueString = "[\"" + String.Join("\", \"", attributeValue.ToArray()) + "\"]"; messageAttributes[attributeName] = new MessageAttributeValue { DataType = "String.Array", StringValue = valueString }; } public void AddAttribute(String attributeName, List<float> attributeValue) { String valueString = "[" + String.Join(", ", attributeValue.ToArray()) + "]"; messageAttributes[attributeName] = new MessageAttributeValue { DataType = "String.Array", StringValue = valueString }; } public void AddAttribute(String attributeName, List<int> attributeValue) { String valueString = "[" + String.Join(", ", attributeValue.ToArray()) + "]"; messageAttributes[attributeName] = new MessageAttributeValue { DataType = "String.Array", StringValue = valueString }; } public void AddAttribute(String attributeName, List<Boolean> attributeValue) { String valueString = "[" + String.Join(", ", attributeValue.ToArray()) + "]"; messageAttributes[attributeName] = new MessageAttributeValue { DataType = "String.Array", StringValue = valueString }; } public String Publish(AmazonSimpleNotificationServiceClient snsClient, String topicArn) { PublishRequest request = new PublishRequest { TopicArn = topicArn, MessageAttributes = messageAttributes, Message = message }; PublishResponse result = snsClient.Publish(request); return result.MessageId; } } }

    El siguiente fragmento de código inicializa y utiliza la clase SNSMessageAttributes de ejemplo.

    // Initialize the example class. SNSMessageAttributes message = new SNSMessageAttributes(messageBody); // Add message attributes with string values. message.AddAttribute("store", "example_corp"); message.AddAttribute("event", "order_placed"); // Add a message attribute with a list of string values. List<String> interestsValues = new List<String>(); interestsValues.Add("soccer"); interestsValues.Add("rugby"); interestsValues.Add("hockey"); message.AddAttribute("customer_interests", interestsValues); // Add a message attribute with a numeric value. message.AddAttribute("price_usd", 1000); // Add a Boolean attribute for filtering using subscription filter policies. // The class applies a String.Array data type to this attribute, allowing it // to be evaluated by a filter policy. List<Boolean> encryptedVal = new List<Boolean>(); encryptedVal.Add(false); message.AddAttribute("encrypted", encryptedVal); // Publish the message. String msgId = message.Publish(snsClient, topicArn); // Print the MessageId of the published message. Console.WriteLine("MessageId: " + msgId);
  4. Compile y ejecute el código.

    El mensaje se publica y se imprime MessageId, por ejemplo:

    MessageId: 1234a567-bc89-012d-3e45-6fg7h890123i