Trabajar con Amazon Simple Notification Service - AWS SDK for Java 2.x

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.

Trabajar con Amazon Simple Notification Service

Con Amazon Simple Notification Service, puede enviar fácilmente mensajes de notificación push en tiempo real desde sus aplicaciones a los suscriptores a través de distintos canales de comunicación. En este tema se describe cómo ejecutar algunas de las funciones básicas de Amazon SNS.

Crear un tema

Un tema es una agrupación lógica de canales de comunicación que define a qué sistemas se envía un mensaje (por ejemplo, la difusión de un mensaje a AWS Lambda y un webhook HTTP). Se envían mensajes a Amazon SNS y, a continuación, se distribuyen a los canales definidos en el tema. Esto permite que los mensajes estén disponibles para los suscriptores.

Para crear un tema, primero cree un objeto CreateTopicRequest con el nombre del conjunto de temas utilizando el método name() en el creador. A continuación, envíe el objeto de solicitud a Amazon SNS mediante el método createTopic() de SnsClient. Puede capturar el resultado de esta solicitud como un objeto CreateTopicResponse, como se muestra en el siguiente fragmento de código.

Importaciones

import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.sns.SnsClient; import software.amazon.awssdk.services.sns.model.CreateTopicRequest; import software.amazon.awssdk.services.sns.model.CreateTopicResponse; import software.amazon.awssdk.services.sns.model.SnsException;

Código

public static String createSNSTopic(SnsClient snsClient, String topicName ) { CreateTopicResponse result = null; try { CreateTopicRequest request = CreateTopicRequest.builder() .name(topicName) .build(); result = snsClient.createTopic(request); return result.topicArn(); } catch (SnsException e) { System.err.println(e.awsErrorDetails().errorMessage()); System.exit(1); } return ""; }

Consulte el ejemplo completo en GitHub.

Enumerar sus temas de Amazon SNS

Para recuperar una lista de los temas de Amazon SNS existentes, cree un objeto ListTopicsRequest. A continuación, envíe el objeto de solicitud a Amazon SNS mediante el método listTopics() de SnsClient. Puede capturar el resultado de esta solicitud como un objeto ListTopicsResponse.

El siguiente fragmento de código imprime el código de estado HTTP de la solicitud y una lista de nombres de recursos de Amazon (ARN) para los temas de Amazon SNS.

Importaciones

import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.sns.SnsClient; import software.amazon.awssdk.services.sns.model.ListTopicsRequest; import software.amazon.awssdk.services.sns.model.ListTopicsResponse; import software.amazon.awssdk.services.sns.model.SnsException;

Código

public static void listSNSTopics(SnsClient snsClient) { try { ListTopicsRequest request = ListTopicsRequest.builder() .build(); ListTopicsResponse result = snsClient.listTopics(request); System.out.println("Status was " + result.sdkHttpResponse().statusCode() + "\n\nTopics\n\n" + result.topics()); } catch (SnsException e) { System.err.println(e.awsErrorDetails().errorMessage()); System.exit(1); } }

Consulte el ejemplo completo en GitHub.

Suscribir un punto de enlace a un tema

Después de crear un tema, puede configurar los canales de comunicación que serán los puntos de enlace de ese tema. Los mensajes se distribuyen a estos puntos de enlace una vez que Amazon SNS los recibe.

Para configurar un canal de comunicación como punto de enlace de un tema, suscriba ese punto de enlace al tema. Para empezar, cree un objeto SubscribeRequest. Especifique el canal de comunicación (por ejemplo, lambda o email) como protocol(). Establezca endpoint() en la ubicación de salida correspondiente (por ejemplo, el ARN de una función Lambda o una dirección de correo electrónico) y, a continuación, el ARN del tema al que desea suscribirse como topicArn(). Envíe el objeto de solicitud a Amazon SNS mediante el método subscribe() del SnsClient. Puede capturar el resultado de esta solicitud como un objeto SubscribeResponse.

El siguiente fragmento de código muestra cómo suscribir una dirección de correo electrónico a un tema.

Importaciones

import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.sns.SnsClient; import software.amazon.awssdk.services.sns.model.SnsException; import software.amazon.awssdk.services.sns.model.SubscribeRequest; import software.amazon.awssdk.services.sns.model.SubscribeResponse;

Código

public static void subEmail(SnsClient snsClient, String topicArn, String email) { try { SubscribeRequest request = SubscribeRequest.builder() .protocol("email") .endpoint(email) .returnSubscriptionArn(true) .topicArn(topicArn) .build(); SubscribeResponse result = snsClient.subscribe(request); System.out.println("Subscription ARN: " + result.subscriptionArn() + "\n\n Status is " + result.sdkHttpResponse().statusCode()); } catch (SnsException e) { System.err.println(e.awsErrorDetails().errorMessage()); System.exit(1); } }

Consulte el ejemplo completo en GitHub.

Publicar un mensaje en un tema

Después de haber configurado un tema y uno o varios puntos de enlace para él, puede publicar un mensaje en el tema. Para empezar, cree un objeto PublishRequest. Especifique el message() que desea enviar y el ARN del tema (topicArn()) al que desea enviarlo. A continuación, envíe el objeto de solicitud a Amazon SNS mediante el método publish() de SnsClient. Puede capturar el resultado de esta solicitud como un objeto PublishResponse.

Importaciones

import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.sns.SnsClient; import software.amazon.awssdk.services.sns.model.PublishRequest; import software.amazon.awssdk.services.sns.model.PublishResponse; import software.amazon.awssdk.services.sns.model.SnsException;

Código

public static void pubTopic(SnsClient snsClient, String message, String topicArn) { try { PublishRequest request = PublishRequest.builder() .message(message) .topicArn(topicArn) .build(); PublishResponse result = snsClient.publish(request); System.out.println(result.messageId() + " Message sent. Status is " + result.sdkHttpResponse().statusCode()); } catch (SnsException e) { System.err.println(e.awsErrorDetails().errorMessage()); System.exit(1); } }

Consulte el ejemplo completo en GitHub.

Cancelar la suscripción de un punto de enlace de un tema

Puede quitar los canales de comunicación configurados como puntos de enlace de un tema. Una vez hecho esto, el tema sigue existiendo y distribuye mensajes a cualquier otro punto de enlace configurado para ese tema.

Para quitar un canal de comunicación como punto de enlace de un tema, cancele la suscripción de dicho punto de enlace del tema. Para empezar, cree un objeto UnsubscribeRequest y establezca el ARN del tema del que desea cancelar la suscripción como subscriptionArn(). A continuación, envíe el objeto de solicitud a SNS mediante el método unsubscribe() de SnsClient. Puede capturar el resultado de esta solicitud como un objeto UnsubscribeResponse.

Importaciones

import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.sns.SnsClient; import software.amazon.awssdk.services.sns.model.SnsException; import software.amazon.awssdk.services.sns.model.UnsubscribeRequest; import software.amazon.awssdk.services.sns.model.UnsubscribeResponse;

Código

public static void unSub(SnsClient snsClient, String subscriptionArn) { try { UnsubscribeRequest request = UnsubscribeRequest.builder() .subscriptionArn(subscriptionArn) .build(); UnsubscribeResponse result = snsClient.unsubscribe(request); System.out.println("\n\nStatus was " + result.sdkHttpResponse().statusCode() + "\n\nSubscription was removed for " + request.subscriptionArn()); } catch (SnsException e) { System.err.println(e.awsErrorDetails().errorMessage()); System.exit(1); } }

Consulte el ejemplo completo en GitHub.

Eliminación de un tema

Para eliminar un tema de Amazon SNS, primero cree un objeto DeleteTopicRequest con el ARN del conjunto de temas como el método topicArn() en el creador. A continuación, envíe el objeto de solicitud a Amazon SNS mediante el método deleteTopic() de SnsClient. Puede capturar el resultado de esta solicitud como un objeto DeleteTopicResponse, como se muestra en el siguiente fragmento de código.

Importaciones

import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.sns.SnsClient; import software.amazon.awssdk.services.sns.model.DeleteTopicRequest; import software.amazon.awssdk.services.sns.model.DeleteTopicResponse; import software.amazon.awssdk.services.sns.model.SnsException;

Código

public static void deleteSNSTopic(SnsClient snsClient, String topicArn ) { try { DeleteTopicRequest request = DeleteTopicRequest.builder() .topicArn(topicArn) .build(); DeleteTopicResponse result = snsClient.deleteTopic(request); System.out.println("\n\nStatus was " + result.sdkHttpResponse().statusCode()); } catch (SnsException e) { System.err.println(e.awsErrorDetails().errorMessage()); System.exit(1); } }

Consulte el ejemplo completo en GitHub.

Para obtener más información, consulte Amazon Simple Notification Service Developer Guide.