Passaggio 1: assicurati che l'endpoint sia pronto per elaborare i messaggi Amazon SNS - Amazon Simple Notification Service

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Passaggio 1: assicurati che l'endpoint sia pronto per elaborare i messaggi Amazon SNS

Prima di sottoscrivere il tuo HTTP o il tuo HTTPS endpoint a un argomento, devi assicurarti che l'HTTPSendpoint HTTP o sia in grado di gestire le HTTP POST richieste SNS utilizzate da Amazon per inviare i messaggi di conferma e notifica dell'abbonamento. Di solito, ciò significa creare e distribuire un'applicazione Web (ad esempio, un servlet Java se l'host dell'endpoint esegue Linux con Apache e Tomcat) che elabora le richieste provenienti da Amazon. HTTP SNS Quando sottoscrivi un HTTP endpoint, Amazon SNS invia una richiesta di conferma dell'abbonamento. Il tuo endpoint deve essere pronto a ricevere ed elaborare questa richiesta al momento della creazione dell'abbonamento, poiché Amazon SNS invia la richiesta in quel momento. Amazon non SNS invierà notifiche all'endpoint finché non confermerai l'abbonamento. Una volta confermato l'abbonamento, Amazon SNS invierà notifiche all'endpoint quando viene eseguita un'azione di pubblicazione sull'argomento sottoscritto.

Per impostare l'endpoint in modo che elabori i messaggi di conferma della sottoscrizione e di notifica
  1. Il codice dovrebbe leggere le HTTP intestazioni delle HTTP POST richieste che Amazon SNS invia al tuo endpoint. Il codice dovrebbe cercare il campo dell'intestazionex-amz-sns-message-type, che indica il tipo di messaggio che Amazon ti SNS ha inviato. Osservando l'intestazione, puoi determinare il tipo di messaggio senza dover analizzare il corpo della richiesta. HTTP Sono due i tipi che devi gestire: SubscriptionConfirmation e Notification. Il messaggio UnsubscribeConfirmation viene utilizzato solo quando la sottoscrizione viene eliminata dall'argomento.

    Per informazioni dettagliate sull'HTTPintestazione, consulta. HTTP/HTTPSintestazioni La seguente HTTP POST richiesta è un esempio di messaggio di conferma dell'iscrizione.

    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" }
  2. Il codice deve analizzare il JSON documento nel corpo della HTTP POST richiesta e nel tipo di contenuto text/plain per leggere le coppie nome-valore che compongono il messaggio Amazon. SNS Usa un JSON parser che gestisca la conversione della rappresentazione in escape dei caratteri di controllo nei rispettivi valori di carattere (ad esempio, convertendo\nin ASCII un carattere di nuova riga). È possibile utilizzare un JSON parser esistente come Jackson Processor o scriverne uno personalizzato. JSON Per inviare il testo nei campi oggetto e messaggio come validoJSON, Amazon SNS deve convertire alcuni caratteri di controllo in rappresentazioni escape che possono essere incluse nel JSON documento. Quando ricevi il JSON documento nel corpo della POST richiesta inviata al tuo dispositivo, devi riconvertire i caratteri sfuggiti ai valori dei caratteri originali se desideri una rappresentazione esatta dell'oggetto e dei messaggi originali pubblicati sull'argomento. Questo è un aspetto critico se desideri verificare la firma di una notifica, perché la firma usa il messaggio e l'oggetto nel formato originale come parte della stringa di firma.

  3. Il codice deve verificare l'autenticità di una notifica, di un messaggio di conferma dell'abbonamento o dell'annullamento dell'iscrizione inviato da Amazon. SNS Utilizzando le informazioni contenute nel SNS messaggio Amazon, il tuo endpoint può ricreare la firma in modo da poter verificare il contenuto del messaggio abbinando la tua firma alla firma che Amazon SNS ha inviato con il messaggio. Per ulteriori informazioni sulla verifica della firma di un messaggio, consulta Verifica delle firme dei messaggi Amazon SNS.

  4. In base al tipo specificato dal campo di intestazionex-amz-sns-message-type, il codice dovrebbe leggere il JSON documento contenuto nel corpo della HTTP richiesta ed elaborare il messaggio. Di seguito sono riportate le linee guida per gestire i due tipi di messaggi principali:

    SubscriptionConfirmation

    Leggete il valore SubscribeURL e visitateloURL. Per confermare l'abbonamento e iniziare a ricevere notifiche sull'endpoint, devi visitare il SubscribeURL URL (ad esempio, inviando una HTTP GET richiesta aURL). Vedi la HTTP richiesta di esempio nel passaggio precedente per vedere che SubscribeURL aspetto ha. Per ulteriori informazioni sul formato del messaggio SubscriptionConfirmation, consulta HTTP/formato HTTPS di conferma dell'iscrizione JSON. Quando visiti ilURL, riceverai una risposta simile al seguente XML documento. Il documento restituisce l'abbonamento ARN per l'endpoint all'interno dell'ConfirmSubscriptionResultelemento.

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

    In alternativa alla visita diSubscribeURL, è possibile confermare l'iscrizione utilizzando l'ConfirmSubscriptionazione con il valore corrispondente Token impostato nel SubscriptionConfirmation messaggio. Se desideri che solo il proprietario dell'argomento e il proprietario della sottoscrizione possano annullare la sottoscrizione dell'endpoint, chiama l'operazione ConfirmSubscription con una firma AWS .

    Notifica

    Leggi i valori di Subject e Message per ottenere le informazioni sulla notifica pubblicate nell'argomento.

    Per i dettagli sul formato del messaggio Notification, consulta HTTP/HTTPSintestazioni. La HTTP POST richiesta seguente è un esempio di messaggio di notifica inviato all'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" }
  5. Assicurati che il tuo endpoint risponda al HTTP POST messaggio di Amazon SNS con il codice di stato appropriato. La connessione scadrà tra circa 15 secondi. Se l'endpoint non risponde prima del timeout della connessione o se restituisce un codice di stato compreso tra 200 e 4 xx, Amazon SNS considererà la consegna del messaggio come un tentativo fallito.

  6. Assicurati che il tuo codice sia in grado di gestire i tentativi di recapito dei messaggi da AmazonSNS. Se Amazon SNS non riceve una risposta corretta dal tuo endpoint, tenta di recapitare nuovamente il messaggio. Ciò vale per tutti i messaggi, incluso il messaggio di conferma della sottoscrizione. Per impostazione predefinita, se il recapito iniziale del messaggio fallisce, Amazon SNS tenta fino a tre tentativi con un ritardo tra i tentativi falliti impostato su 20 secondi.

    Nota

    La richiesta del messaggio scade dopo circa 15 secondi. Ciò significa che, se l'errore di recapito del messaggio è causato da un timeout, Amazon SNS riprova per circa 35 secondi dopo il precedente tentativo di consegna. È possibile impostare una policy di consegna diversa per l'endpoint.

    Amazon SNS utilizza il campo di x-amz-sns-message-id intestazione per identificare in modo univoco ogni messaggio pubblicato su un argomento AmazonSNS. Confrontando i IDs messaggi che hai elaborato con i messaggi in arrivo, puoi determinare se si tratta di un nuovo tentativo.

  7. Se stai sottoscrivendo un HTTPS endpoint, assicurati che l'endpoint disponga di un certificato server rilasciato da un'autorità di certificazione (CA) affidabile. Amazon SNS invierà messaggi solo agli HTTPS endpoint che dispongono di un certificato server firmato da una CA considerata affidabile da AmazonSNS.

  8. Implementa il codice che hai creato per ricevere SNS messaggi Amazon. Quando effettui la sottoscrizione dell'endpoint, questo deve essere pronto a ricevere almeno il messaggio di conferma della sottoscrizione.