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á.
Etapa 1: Certifique-se de que seu endpoint esteja pronto para processar mensagens da Amazon SNS
Antes de inscrever seu endpoint HTTP ou HTTPS endpoint em um tópico, você deve se certificar de que o HTTPS endpoint HTTP ou tenha a capacidade de lidar com as HTTP POST solicitações que a Amazon SNS usa para enviar as mensagens de confirmação e notificação da assinatura. Normalmente, isso significa criar e implantar uma aplicação web (por exemplo, um servlet Java se seu host de endpoint estiver executando Linux com Apache e Tomcat) que processa as solicitações da Amazon. HTTP SNS Quando você assina um HTTP endpoint, a Amazon SNS envia a ele uma solicitação de confirmação de assinatura. Seu endpoint deve estar preparado para receber e processar essa solicitação ao criar a assinatura, pois a Amazon SNS envia essa solicitação naquele momento. A Amazon não SNS enviará notificações para o endpoint até que você confirme a assinatura. Depois de confirmar a assinatura, a Amazon SNS enviará notificações ao endpoint quando uma ação de publicação for realizada no tópico inscrito.
Para configurar o endpoint para processar as mensagens de notificação e de confirmação de inscrição
-
Seu código deve ler HTTP os cabeçalhos das HTTP POST solicitações que a Amazon SNS envia ao seu endpoint. Seu código deve procurar o campo de cabeçalho
x-amz-sns-message-type
, que informa o tipo de mensagem que a Amazon SNS enviou para você. Ao observar o cabeçalho, você pode determinar o tipo de mensagem sem precisar analisar o corpo da HTTP solicitação. Há dois tipos com os quais você precisa lidar:SubscriptionConfirmation
eNotification
. A mensagemUnsubscribeConfirmation
é usada somente quando a assinatura é excluída do tópico.Para obter detalhes sobre o HTTP cabeçalho, consulteHTTP/HTTPScabeçalhos. A HTTP POST solicitação a seguir é um exemplo de mensagem de confirmação de assinatura.
POST / HTTP/1.1 x-amz-sns-message-type: SubscriptionConfirmation x-amz-sns-message-id: 165545c9-2a5c-472c-8df2-7ff2be2b3b1b x-amz-sns-topic-arn: arn:aws:sns:us-west-2:123456789012:MyTopic Content-Length: 1336 Content-Type: text/plain; charset=UTF-8 Host: example.com Connection: Keep-Alive User-Agent: Amazon Simple Notification Service Agent { "Type" : "SubscriptionConfirmation", "MessageId" : "165545c9-2a5c-472c-8df2-7ff2be2b3b1b", "Token" : "2336412f37f...", "TopicArn" : "arn:aws:sns:us-west-2:123456789012:MyTopic", "Message" : "You have chosen to subscribe to the topic arn:aws:sns:us-west-2:123456789012:MyTopic.\nTo confirm the subscription, visit the SubscribeURL included in this message.", "SubscribeURL" : "https://sns.us-west-2.amazonaws.com/?Action=ConfirmSubscription&TopicArn=arn:aws:sns:us-west-2:123456789012:MyTopic&Token=2336412f37...", "Timestamp" : "2012-04-26T20:45:04.751Z", "SignatureVersion" : "1", "Signature" : "EXAMPLEpH+...", "SigningCertURL" : "https://sns.us-west-2.amazonaws.com/SimpleNotificationService-f3ecfb7224c7233fe7bb5f59f96de52f.pem" }
-
Seu código deve analisar o JSON documento no corpo da HTTP POST solicitação e digitar o conteúdo text/plain para ler os pares nome-valor que compõem a mensagem da Amazon. SNS Use um JSON analisador que manipule a conversão da representação escapada dos caracteres de controle em seus valores de caracteres (por exemplo, convertendo\nem um ASCII caractere de nova linha). Você pode usar um JSON analisador existente, como o Jackson JSON Processor
, ou escrever o seu próprio. Para enviar o texto nos campos de assunto e mensagem como válidoJSON, a Amazon SNS deve converter alguns caracteres de controle em representações de escape que podem ser incluídas no JSON documento. Ao receber o JSON documento no corpo da POST solicitação enviada ao seu endpoint, você deve converter os caracteres de escape de volta aos valores originais se quiser uma representação exata do assunto original e das mensagens publicadas no tópico. Isso é essencial se você deseja verificar a assinatura de uma notificação, pois a assinatura usa a mensagem e o assunto em seus formulários originais como parte da string para assinar. -
Seu código deve verificar a autenticidade de uma mensagem de notificação, confirmação de assinatura ou confirmação de cancelamento de assinatura enviada pela Amazon. SNS Usando as informações contidas na SNS mensagem da Amazon, seu endpoint pode recriar a assinatura para que você possa verificar o conteúdo da mensagem combinando sua assinatura com a assinatura que a Amazon SNS enviou com a mensagem. Para obter mais informações sobre como verificar a assinatura de uma mensagem, consulte Verificando as assinaturas das mensagens da Amazon SNS.
-
Com base no tipo especificado pelo campo de cabeçalho
x-amz-sns-message-type
, seu código deve ler o JSON documento contido no corpo da HTTP solicitação e processar a mensagem. A seguir, são apresentadas as diretrizes para lidar com os dois tipos principais de mensagens:- SubscriptionConfirmation
-
Leia o valor
SubscribeURL
e visite issoURL. Para confirmar a assinatura e começar a receber notificações no endpoint, você deve visitar oSubscribeURL
URL (por exemplo, enviando uma HTTP GET solicitação para oURL). Veja o exemplo de HTTP solicitação na etapa anterior para ver qual é aSubscribeURL
aparência. Para obter mais informações sobre o formato da mensagemSubscriptionConfirmation
, consulte HTTP/JSONformato HTTPS de confirmação de assinatura. Ao visitar oURL, você receberá uma resposta semelhante ao XML documento a seguir. O documento retorna a assinatura ARN do endpoint dentro doConfirmSubscriptionResult
elemento.<ConfirmSubscriptionResponse xmlns="http://sns.amazonaws.com/doc/2010-03-31/"> <ConfirmSubscriptionResult> <SubscriptionArn>arn:aws:sns:us-west-2:123456789012:MyTopic:2bcfbf39-05c3-41de-beaa-fcfcc21c8f55</SubscriptionArn> </ConfirmSubscriptionResult> <ResponseMetadata> <RequestId>075ecce8-8dac-11e1-bf80-f781d96e9307</RequestId> </ResponseMetadata> </ConfirmSubscriptionResponse>
Como alternativa à visita ao
SubscribeURL
, você pode confirmar a assinatura usando a ConfirmSubscriptionação com o valor correspondenteToken
definido naSubscriptionConfirmation
mensagem. Se você deseja permitir que somente o proprietário do tópico e o proprietário da inscrição cancelem o recebimento para o endpoint, chame a açãoConfirmSubscription
com uma assinatura AWS . - Notificação
-
Leia os valores de
Subject
eMessage
para obter as informações da notificação que foi publicada no tópico.Para obter mais detalhes sobre o formato da mensagem
Notification
, consulte HTTP/HTTPScabeçalhos. A HTTP POST solicitação a seguir é um exemplo de uma mensagem de notificação enviada ao endpoint example.com.POST / HTTP/1.1 x-amz-sns-message-type: Notification x-amz-sns-message-id: 22b80b92-fdea-4c2c-8f9d-bdfb0c7bf324 x-amz-sns-topic-arn: arn:aws:sns:us-west-2:123456789012:MyTopic x-amz-sns-subscription-arn: arn:aws:sns:us-west-2:123456789012:MyTopic:c9135db0-26c4-47ec-8998-413945fb5a96 Content-Length: 773 Content-Type: text/plain; charset=UTF-8 Host: example.com Connection: Keep-Alive User-Agent: Amazon Simple Notification Service Agent { "Type" : "Notification", "MessageId" : "22b80b92-fdea-4c2c-8f9d-bdfb0c7bf324", "TopicArn" : "arn:aws:sns:us-west-2:123456789012:MyTopic", "Subject" : "My First Message", "Message" : "Hello world!", "Timestamp" : "2012-05-02T00:54:06.655Z", "SignatureVersion" : "1", "Signature" : "EXAMPLEw6JRN...", "SigningCertURL" : "https://sns.us-west-2.amazonaws.com/SimpleNotificationService-f3ecfb7224c7233fe7bb5f59f96de52f.pem", "UnsubscribeURL" : "https://sns.us-west-2.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-west-2:123456789012:MyTopic:c9135db0-26c4-47ec-8998-413945fb5a96" }
-
Certifique-se de que seu endpoint responda à HTTP POST mensagem da Amazon SNS com o código de status apropriado. O tempo limite da conexão será atingido em aproximadamente 15 segundos. Se seu endpoint não responder antes que a conexão expire, ou se seu endpoint retornar um código de status fora do intervalo de 200—4 xx, a Amazon SNS considerará a entrega da mensagem como uma tentativa fracassada.
-
Certifique-se de que seu código possa lidar com novas tentativas de entrega de mensagens da AmazonSNS. Se a Amazon SNS não receber uma resposta bem-sucedida do seu endpoint, ela tentará entregar a mensagem novamente. Isso se aplica a todas as mensagens, incluindo a mensagem de confirmação de inscrição. Por padrão, se a entrega inicial da mensagem falhar, a Amazon SNS tentará até três novas tentativas com um atraso entre as tentativas fracassadas definido em 20 segundos.
nota
A solicitação de mensagem expira após aproximadamente 15 segundos. Isso significa que, se a falha na entrega da mensagem for causada por um tempo limite, a Amazon SNS tentará novamente por aproximadamente 35 segundos após a tentativa de entrega anterior. Você pode definir uma política de entrega diferente para o endpoint.
A Amazon SNS usa o campo de
x-amz-sns-message-id
cabeçalho para identificar de forma exclusiva cada mensagem publicada em um tópico da AmazonSNS. Ao comparar as IDs mensagens que você processou com as mensagens recebidas, você pode determinar se a mensagem é uma tentativa de nova tentativa. -
Se você estiver assinando um HTTPS endpoint, certifique-se de que seu endpoint tenha um certificado de servidor de uma Autoridade Certificadora (CA) confiável. A Amazon só SNS enviará mensagens para HTTPS endpoints que tenham um certificado de servidor assinado por uma CA confiável pela AmazonSNS.
-
Implante o código que você criou para receber SNS mensagens da Amazon. Quando você assinar o endpoint, ele deve estar pronto para receber pelo menos a mensagem de confirmação de inscrição.