Langkah 1: Pastikan titik akhir Anda siap untuk memproses pesan Amazon SNS - Amazon Simple Notification Service

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Langkah 1: Pastikan titik akhir Anda siap untuk memproses pesan Amazon SNS

Sebelum Anda melanggankan titik akhir HTTP atau HTTPS ke topik, Anda harus memastikan bahwa titik akhir HTTP atau HTTPS memiliki kemampuan untuk menangani permintaan HTTP POST yang digunakan Amazon SNS untuk mengirimkan konfirmasi berlangganan dan pesan notifikasi. Biasanya, hal ini berarti membuat dan men-deploy aplikasi web (misalnya, servlet Java jika host titik akhir Anda menjalankan Linux dengan Apache dan Tomcat) yang memproses permintaan HTTP dari Amazon SNS. Saat Anda melanggankan titik akhir HTTP, Amazon SNS mengirimkan permintaan konfirmasi berlangganan. Titik akhir Anda harus siap untuk menerima dan memproses permintaan ini saat Anda membuat langganan karena Amazon SNS mengirimkan permintaan ini pada waktu itu. Amazon SNS tidak akan mengirimkan notifikasi ke titik akhir sampai Anda mengonfirmasi langganan. Setelah Anda mengonfirmasi langganan, Amazon SNS akan mengirimkan notifikasi ke titik akhir saat tindakan memublikasikan dilakukan pada topik yang dilanggan.

Menyiapkan titik akhir Anda untuk memproses konfirmasi berlangganan dan pesan notifikasi
  1. Kode Anda harus membaca header HTTP dari permintaan HTTP POST yang Amazon SNS kirim ke titik akhir Anda. Kode Anda harus mencari kolom header x-amz-sns-message-type, yang memberi tahu Anda jenis pesan yang telah dikirim Amazon SNS kepada Anda. Dengan melihat header, Anda dapat menentukan jenis pesan tanpa harus mengurai isi permintaan HTTP. Ada dua jenis yang perlu Anda tangani: SubscriptionConfirmation dan Notification. Pesan UnsubscribeConfirmation hanya digunakan saat langganan dihapus dari topik.

    Untuk detail tentang header HTTP, lihat Header HTTP/HTTPS. Permintaan HTTP POST berikut adalah contoh pesan konfirmasi berlangganan.

    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. Kode Anda harus mengurai dokumen JSON di badan permintaan HTTP POST dan teks/polos tipe konten untuk membaca pasangan nama-nilai yang membentuk pesan Amazon SNS. Gunakan parser JSON yang menangani konversi representasi yang di-escape dari karakter kontrol kembali ke nilai-nilai karakter ASCII-nya (misalnya, mengonversi \n ke karakter baris baru). Anda dapat menggunakan parser JSON yang ada seperti Jackson JSON Processor atau menulisnya sendiri. Untuk mengirimkan teks di bidang subjek dan pesan sebagai JSON yang valid, Amazon SNS harus mengonversi beberapa karakter kontrol untuk representasi yang di-escape yang dapat dimasukkan dalam dokumen JSON. Saat Anda menerima dokumen JSON di isi permintaan POST yang dikirim ke titik akhir Anda, Anda harus mengonversi karakter yang di-escape kembali ke nilai karakter aslinya jika Anda menginginkan representasi yang tepat dari subjek asli dan pesan yang dipublikasikan ke topik. Hal ini penting jika Anda ingin memverifikasi tanda tangan notifikasi karena tanda tangan menggunakan pesan dan subjek dalam bentuk aslinya sebagai bagian dari string untuk ditandatangani.

  3. Kode Anda harus memverifikasi keaslian notifikasi, konfirmasi berlangganan, atau pesan konfirmasi berhenti berlangganan yang dikirim oleh Amazon SNS. Dengan menggunakan informasi yang terdapat dalam pesan Amazon SNS, titik akhir Anda dapat menciptakan kembali tanda tangan sehingga Anda dapat memverifikasi isi pesan dengan mencocokkan tanda tangan Anda dengan tanda tangan yang dikirim Amazon SNS bersama dengan pesan. Untuk informasi selengkapnya tentang memverifikasi tanda tangan pesan, lihat Memverifikasi tanda tangan pesan Amazon SNS.

  4. Berdasarkan jenis yang ditentukan oleh kolom header x-amz-sns-message-type, kode Anda harus membaca dokumen JSON yang terkandung dalam isi permintaan HTTP dan memproses pesan. Berikut adalah panduan untuk menangani dua jenis utama pesan:

    SubscriptionConfirmation

    Baca nilai SubscribeURL dan kunjungi URL tersebut. Untuk mengonfirmasi langganan dan mulai menerima notifikasi di titik akhir, Anda harus mengunjungi URL SubscribeURL (misalnya, dengan mengirimkan permintaan HTTP GET ke URL). Lihat contoh permintaan HTTP pada langkah sebelumnya untuk melihat seperti apa SubscribeURL itu. Untuk informasi lebih lanjut tentang format SubscriptionConfirmation, lihat Format JSON konfirmasi berlangganan HTTP/HTTPS. Saat Anda mengunjungi URL, Anda akan mendapatkan kembali respon yang terlihat seperti dokumen XML berikut. Dokumen mengembalikan ARN langganan untuk titik akhir dalam elemen ConfirmSubscriptionResult.

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

    Sebagai alternatif untuk mengunjungiSubscribeURL, Anda dapat mengonfirmasi langganan menggunakan ConfirmSubscriptiontindakan dengan Token set ke nilai yang sesuai dalam SubscriptionConfirmation pesan. Jika Anda ingin mengizinkan hanya pemilik topik dan pemilik langganan untuk dapat berhenti berlangganan titik akhir, Anda memanggil tindakan ConfirmSubscription dengan tanda tangan AWS.

    Pemberitahuan

    Baca nilai Subject dan Message untuk mendapatkan informasi notifikasi yang dipublikasikan ke topik.

    Untuk detail tentang format pesan Notification, lihat Header HTTP/HTTPS. Permintaan HTTP POST berikut adalah contoh pesan notifikasi yang dikirim ke titik akhir 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. Pastikan bahwa titik akhir Anda menanggapi pesan HTTP POST dari Amazon SNS dengan kode status yang sesuai. Waktu koneksi akan habis dalam 15 detik. Jika titik akhir Anda tidak merespons sebelum waktu koneksi habis atau jika titik akhir Anda mengembalikan kode status di luar jangkauan 200—4xx, Amazon SNS akan mempertimbangkan pengiriman pesan sebagai upaya yang gagal.

  6. Pastikan bahwa kode Anda dapat menangani percobaan kembali pengiriman pesan dari Amazon SNS. Jika tidak menerima respons yang berhasil dari titik akhir Anda, Amazon SNS mencoba untuk mengirimkan pesan lagi. Hal ini berlaku untuk semua pesan, termasuk pesan konfirmasi berlangganan. Secara default, jika pengiriman awal pesan gagal, Amazon SNS mencoba hingga tiga percobaan kembali dengan penundaan antara upaya yang gagal ditetapkan pada 20 detik.

    catatan

    Waktu permintaan pesan habis setelah 15 detik. Hal ini berarti, jika kegagalan pengiriman pesan disebabkan oleh waktu habis, Amazon SNS mencoba lagi selama sekitar 35 detik setelah upaya pengiriman sebelumnya. Anda dapat menetapkan kebijakan pengiriman yang berbeda untuk titik akhir.

    Amazon SNS menggunakan bidang x-amz-sns-message-id header untuk mengidentifikasi secara unik setiap pesan yang dipublikasikan ke topik Amazon SNS. Dengan membandingkan ID pesan yang telah diproses dengan pesan masuk, Anda dapat menentukan apakah pesan tersebut merupakan upaya percobaan kembali.

  7. Jika Anda melanggankan titik akhir HTTPS, pastikan bahwa titik akhir Anda memiliki sertifikat server dari Otoritas Sertifikasi (CA) terpercaya. Amazon SNS hanya akan mengirimkan pesan ke titik akhir HTTPS yang memiliki sertifikat server yang ditandatangani oleh CA yang dipercaya oleh Amazon SNS.

  8. Deploy kode yang telah Anda buat untuk menerima pesan Amazon SNS. Saat Anda melanggankan titik akhir, titik akhir harus siap untuk menerima setidaknya pesan konfirmasi berlangganan.