Trabalhar com Amazon Simple Notification Service - AWS SDK for Java 2.x

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

Trabalhar com Amazon Simple Notification Service

Com o Amazon Simple Notification Service, é possível enviar facilmente mensagens de notificação em tempo real dos aplicativos aos assinantes em vários canais de comunicação. Este tópico descreve como executar algumas das funções básicas do Amazon SNS.

Criar um tópico

Um tópico é um agrupamento lógico de canais de comunicação que define para quais sistemas enviar uma mensagem, por exemplo, espalhando uma mensagem do AWS Lambda e um webhook HTTP. Você envia mensagens para o Amazon SNS, e elas são distribuídas para os canais definidos no tópico. Isso disponibiliza as mensagens para os assinantes.

Para criar um tópico, primeiro compile um objeto CreateTopicRequest com o nome do conjunto de tópicos usando o método name() no compilador. Envie o objeto de solicitação para o Amazon SNS usando o método createTopic() do SnsClient. É possível capturar o resultado dessa solicitação como um objeto CreateTopicResponse, conforme demonstrado no trecho de código a seguir.

Importações

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 ""; }

Veja o exemplo completo no GitHub.

Listar seus tópicos do Amazon SNS

Para recuperar uma lista dos tópicos existentes do Amazon SNS, compile um objeto ListTopicsRequest. Envie o objeto de solicitação para o Amazon SNS usando o método listTopics() do SnsClient. É possível capturar o resultado dessa solicitação como um objeto ListTopicsResponse.

O trecho de código a seguir imprime o código de status HTTP da solicitação e uma lista de nomes de recurso da Amazon (ARNs) para os tópicos do Amazon SNS.

Importações

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

Veja o exemplo completo no GitHub.

Inscrever um endpoint em um tópico

Depois de criar um tópico, é possível configurar quais canais de comunicação serão endpoints para esse tópico. As mensagens são distribuídas para esses endpoints após o Amazon SNS recebê-las.

Para configurar um canal de comunicação como um endpoint para um tópico, inscreva esse endpoint no tópico. Para iniciar, compile um objeto SubscribeRequest. Especifique o canal de comunicação (por exemplo, lambda ou email) como protocol(). Defina o endpoint() como o local de saída relevante (por exemplo, o ARN de uma função do Lambda ou um endereço de e-mail) e defina o ARN do tópico ai qual você deseja se inscrever como topicArn(). Envie o objeto de solicitação para o Amazon SNS usando o método subscribe() do SnsClient. É possível capturar o resultado dessa solicitação como um objeto SubscribeResponse.

O trecho de código a seguir mostra como inscrever um endereço de e-mail em um tópico.

Importações

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

Veja o exemplo completo no GitHub.

Publicar uma mensagem em um tópico

Depois de ter um tópico e um ou mais endpoints configurados para ele, será possível publicar uma mensagem nele. Para iniciar, compile um objeto PublishRequest. Especifique a message() a ser enviada e o ARN do tópico (topicArn()) para o qual enviá-la. Envie o objeto de solicitação para o Amazon SNS usando o método publish() do SnsClient. É possível capturar o resultado dessa solicitação como um objeto PublishResponse.

Importações

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

Veja o exemplo completo no GitHub.

Cancelar a inscrição de um endpoint de um tópico

Você pode remover os canais de comunicação configurados como endpoints de um tópico. Depois de fazer isso, o tópico em si continua a existir e distribuir mensagens para quaisquer endpoints finais configurados para esse tópico.

Para remover um canal de comunicação como um endpoint de um tópico, cancele a inscrição desse endpoint do tópico. Para começar, compile um objeto UnsubscribeRequest e defina o ARN do tópico do qual você deseja cancelar a inscrição como o subscriptionArn(). Envie o objeto de solicitação para o SNS usando o método unsubscribe() do SnsClient. É possível capturar o resultado dessa solicitação como um objeto UnsubscribeResponse.

Importações

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

Veja o exemplo completo no GitHub.

Excluir um tópico

Para excluir um tópico do Amazon SNS, primeiro compile um objeto DeleteTopicRequest com o ARN do tópico definido como o método topicArn() no compilador. Envie o objeto de solicitação para o Amazon SNS usando o método deleteTopic() do SnsClient. É possível capturar o resultado dessa solicitação como um objeto DeleteTopicResponse, conforme demonstrado no trecho de código a seguir.

Importações

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

Veja o exemplo completo no GitHub.

Para obter mais informações, consulte o Guia do desenvolvedor do Amazon Simple Notification Service.