

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

# Strategi pemesanan dan deduplikasi pesan menggunakan topik Amazon SNS FIFO
<a name="sns-fifo-topics"></a>

[Topik ini memberikan informasi tentang fitur dan fungsionalitas topik Amazon SNS FIFO (First-In-First-Out) dan bagaimana mereka berintegrasi dengan antrian Amazon SQS FIFO.](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/FIFO-queues.html) Anda akan belajar cara menggunakan layanan ini bersama-sama untuk memastikan pemesanan dan deduplikasi pesan yang ketat, penting untuk aplikasi yang memerlukan konsistensi data. Konten ini mencakup kasus penggunaan khusus di mana topik Amazon SNS FIFO bermanfaat, memberikan wawasan tentang skenario di mana urutan pesan dan keunikan sangat penting.

Anda juga akan mempelajari detail teknis pemesanan pesan, pengelompokan pesan, dan bagaimana hal ini memengaruhi pengiriman pesan. Topik deduplikasi pesan menjelaskan mekanisme yang mencegah duplikat pesan, memastikan bahwa setiap pesan diproses hanya sekali. Selain itu, Anda akan belajar tentang penyaringan pesan, keamanan, dan daya tahan, yang penting untuk menjaga integritas dan keandalan sistem pesan Anda. Konten ini juga mencakup informasi tentang pengarsipan dan pemutaran ulang pesan, menawarkan strategi untuk mengelola riwayat pesan. Contoh kode praktis juga disediakan untuk membantu Anda menerapkan fitur-fitur ini di aplikasi Anda sendiri, memberi Anda pengalaman langsung dengan topik FIFO Amazon SNS dan integrasinya dengan antrian FIFO Amazon SQS.

# Topik FIFO throughput tinggi di Amazon SNS
<a name="fifo-high-throughput"></a>

Topik FIFO throughput tinggi di Amazon SNS secara efisien mengelola throughput pesan tinggi sambil mempertahankan urutan pesan yang ketat, memastikan keandalan dan skalabilitas untuk aplikasi yang memproses banyak pesan. Solusi ini sangat ideal untuk skenario yang menuntut throughput tinggi dan pengiriman pesan yang dipesan. Untuk meningkatkan throughput pesan menggunakan topik FIFO throughput tinggi, disarankan untuk meningkatkan jumlah grup pesan. Untuk informasi selengkapnya tentang kuota pesan throughput tinggi, lihat kuota [layanan Amazon SNS](https://docs.aws.amazon.com/general/latest/gr/sns.html) di kuota. *Referensi Umum Amazon Web*

## Kasus penggunaan untuk throughput tinggi untuk topik Amazon SNS FIFO
<a name="fifo-topic-use-cases"></a>

Kasus penggunaan berikut menyoroti beragam aplikasi topik FIFO throughput tinggi, yang menunjukkan efektivitasnya di seluruh industri dan skenario:
+ **Pemrosesan data waktu nyata:** Aplikasi yang berurusan dengan aliran data waktu nyata, seperti pemrosesan peristiwa atau konsumsi data telemetri, dapat memperoleh manfaat dari topik FIFO throughput tinggi untuk menangani masuknya pesan secara terus menerus sambil mempertahankan urutannya untuk analisis yang akurat.
+ **Pemrosesan pesanan e-Commerce:** Dalam platform e-commerce di mana menjaga urutan transaksi pelanggan sangat penting, topik FIFO throughput tinggi memastikan bahwa pesanan dikirim secara berurutan dan tanpa penundaan, bahkan selama musim belanja puncak.
+ **Layanan keuangan:** Lembaga keuangan yang menangani perdagangan frekuensi tinggi atau data transaksional mengandalkan topik FIFO throughput tinggi untuk memproses data pasar dan transaksi dengan latensi minimal sambil mematuhi persyaratan peraturan yang ketat untuk pemesanan pesan.
+ **Streaming media:** Platform streaming dan layanan distribusi media memanfaatkan topik FIFO throughput tinggi untuk mengelola pengiriman file media dan konten streaming, memastikan pengalaman pemutaran yang lancar bagi pengguna sambil mempertahankan urutan pengiriman konten yang benar

## Partisi dan distribusi data untuk throughput tinggi untuk topik Amazon SNS FIFO
<a name="fifo-topic-partitians-and-data-distribution"></a>

Dengan topik throughput tinggi, Amazon SNS mendistribusikan data topik FIFO di seluruh partisi. Partisi adalah alokasi kapasitas untuk topik yang secara otomatis direplikasi di beberapa Availability Zone dalam file. Wilayah AWS Anda tidak mengelola partisi. Sebagai gantinya, Amazon SNS secara otomatis mengelola partisi atas nama Anda, berdasarkan tingkat masuknya.

Untuk topik FIFO, Amazon SNS memodifikasi jumlah partisi dalam suatu topik dalam situasi berikut:
+ Jika tingkat publikasi saat ini mendekati atau melebihi apa yang dapat didukung oleh partisi yang ada, partisi tambahan dialokasikan hingga topik mencapai kuota regional. Untuk informasi tentang kuota, lihat kuota [layanan Amazon SNS](https://docs.aws.amazon.com/general/latest/gr/sns.html) di. *Referensi Umum Amazon Web*
+ Jika partisi saat ini memiliki pemanfaatan rendah, jumlah partisi dapat dikurangi.

Manajemen partisi terjadi secara otomatis di latar belakang dan transparan bagi aplikasi Anda. Topik dan pesan Anda tersedia setiap saat.

**catatan**  
[Pembatalan API Publikasikan](https://docs.aws.amazon.com/sns/latest/api/API_Publish.html) Sementara dapat terjadi jika Anda tiba-tiba dan secara signifikan meningkatkan lalu lintas ke topik Anda saat mengirim beberapa kali volume biasa. Pelambatan ini dapat bertahan hingga durasi jendela deduplikasi sementara topik meningkat untuk mengakomodasi peningkatan lalu lintas.

## Mendistribusikan data dengan grup pesan IDs
<a name="fifo-topic-message-group-ids"></a>

Saat memublikasikan pesan ke topik FIFO, Amazon SNS menggunakan nilai ID grup pesan setiap pesan sebagai masukan ke fungsi hash internal. Nilai output dari fungsi hash menentukan partisi mana yang memproses pesan, satu atau lebih grup pesan IDs dapat ditangani oleh partisi tertentu.

**catatan**  
Amazon SNS dioptimalkan untuk distribusi item yang seragam di seluruh partisi topik FIFO, terlepas dari jumlah partisi. AWS merekomendasikan agar Anda menggunakan grup pesan IDs yang dapat memiliki sejumlah besar nilai yang berbeda. 

## Aktifkan throughput tinggi pada topik Amazon SNS FIFO Anda
<a name="enable-high-throughput-on-fifo-topic"></a>

[Secara default, topik FIFO Amazon SNS dikonfigurasi untuk deduplikasi tingkat topik, ini dikendalikan oleh atribut topik yang [https://docs.aws.amazon.com/sns/latest/api/API_CreateTopic.html](https://docs.aws.amazon.com/sns/latest/api/API_CreateTopic.html)disetel ke `Topic` dan memiliki kuota throughput yang lebih terbatas, lihat kuota layanan Amazon SNS di. *Referensi Umum Amazon Web*](https://docs.aws.amazon.com/general/latest/gr/sns.html)

Untuk mengaktifkan throughput tinggi untuk topik Amazon SNS FIFO Anda, perbarui `FifoThroughputScope` atribut ke. `MessageGroup` Perubahan ini dapat dilakukan melalui konsol atau menggunakan AWS CLI dan SDK, dan juga dapat diatur selama pembuatan topik, yang direkomendasikan Amazon SNS untuk pengalaman pelanggan terbaik dan untuk mengurangi kemungkinan topik Anda dibatasi.

**penting**  
Setelah Anda mengaktifkan topik`MessageGroup`, topik tidak dapat dikembalikan ke `Topic` throughput. `FifoThroughputScope`

## Aktifkan mode throughput tinggi untuk antrean Amazon SQS FIFO berlangganan
<a name="enable-high-throughput-for-sqs-fifo-queue"></a>

Saat memublikasikan ke topik FIFO Amazon SNS Anda dengan throughput tinggi diaktifkan, dan satu atau lebih antrian FIFO Amazon SQS berlangganan, disarankan agar Anda mengaktifkan throughput tinggi pada antrian FIFO Amazon SQS Anda untuk mengaktifkan topik throughput tinggi Amazon SNS FIFO agar terkirim dengan lancar. Untuk selengkapnya lihat [Throughput tinggi untuk antrian FIFO di Panduan Pengembang](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/high-throughput-fifo.html) Layanan *Antrian Sederhana Amazon*.

# Kasus penggunaan contoh topik Amazon SNS FIFO
<a name="fifo-example-use-case"></a>

Contoh berikut menjelaskan platform e-niaga yang dibangun oleh produsen suku cadang mobil menggunakan topik Amazon SNS FIFO dan antrian Amazon SQS. Platform ini terdiri dari empat aplikasi tanpa server:
+ Manajer inventaris menggunakan aplikasi manajemen harga untuk mengatur harga untuk setiap item dalam stok. Di perusahaan ini, harga produk dapat berubah berdasarkan fluktuasi pertukaran mata uang, permintaan pasar, dan pergeseran strategi penjualan. Aplikasi manajemen harga menggunakan AWS Lambda fungsi yang menerbitkan pembaruan harga ke topik Amazon SNS FIFO setiap kali harga berubah.
+ Aplikasi grosir menyediakan backend untuk situs web tempat toko bodi mobil dan produsen mobil dapat membeli suku cadang mobil perusahaan dalam jumlah besar. Untuk mendapatkan pemberitahuan perubahan harga, aplikasi grosir berlangganan antrian Amazon SQS FIFO ke topik Amazon SNS FIFO aplikasi manajemen harga.
+ Sebuah aplikasi ritel menyediakan backend untuk situs web lain tempat pemilik mobil dan penggemar penyetelan mobil dapat membeli suku cadang mobil individu untuk kendaraan mereka. Untuk mendapatkan pemberitahuan perubahan harga, aplikasi ritel juga berlangganan antrian Amazon SQS FIFO ke topik Amazon SNS FIFO aplikasi manajemen harga.
+ Aplikasi analitik yang menggabungkan pembaruan harga dan menyimpannya ke dalam bucket Amazon S3, memungkinkan Amazon Athena untuk menanyakan bucket untuk tujuan intelijen bisnis (BI). Untuk mendapatkan pemberitahuan perubahan harga, aplikasi analitik berlangganan antrian standar Amazon SQS ke topik Amazon SNS FIFO aplikasi manajemen harga. Berbeda dengan aplikasi lain, analitik tidak memerlukan pembaruan harga untuk dipesan secara ketat.

![\[Contoh platform e-niaga yang dibuat oleh produsen suku cadang mobil menggunakan topik Amazon SNS FIFO dan antrian Amazon SQS, menunjukkan bagaimana berbagai aplikasi tanpa server, seperti manajemen harga, grosir, eceran, dan analitik, memanfaatkan layanan ini untuk pengiriman pesan yang dipesan dan deduplikasi. Pengaturan ini memastikan bahwa aplikasi grosir dan eceran menerima pembaruan harga dalam urutan yang benar, sementara aplikasi analitik mengumpulkan data untuk tujuan intelijen bisnis tanpa memerlukan pemesanan pesan yang ketat.\]](http://docs.aws.amazon.com/id_id/sns/latest/dg/images/sns-fifo-usecase.png)


Agar aplikasi grosir dan ritel menerima pembaruan harga dalam urutan yang benar, aplikasi manajemen harga harus menggunakan sistem distribusi pesan yang diurutkan secara ketat. Menggunakan topik Amazon SNS FIFO dan antrian Amazon SQS FIFO memungkinkan pemrosesan pesan secara berurutan dan tanpa duplikasi. Untuk informasi selengkapnya, lihat [Detail pemesanan pesan Amazon SNS untuk topik FIFO](fifo-topic-message-ordering.md). Untuk cuplikan kode yang menerapkan kasus penggunaan ini, lihat [Contoh kode Amazon SNS untuk topik FIFO](fifo-topic-code-examples.md).

# Detail pemesanan pesan Amazon SNS untuk topik FIFO
<a name="fifo-topic-message-ordering"></a>

Topik Amazon SNS FIFO selalu mengirimkan pesan ke antrian Amazon SQS berlangganan dalam urutan yang tepat di mana pesan dipublikasikan ke topik, dan hanya sekali. Dengan antrian Amazon SQS FIFO berlangganan, konsumen antrian menerima pesan dalam urutan yang tepat di mana pesan dikirim ke antrian, dan tidak ada duplikat. Namun, dengan antrean standar Amazon SQS yang berlangganan, konsumen antrian dapat menerima pesan yang rusak, dan lebih dari sekali. Hal ini memungkinkan pemisahan pelanggan lebih lanjut dari penerbit, memberikan pelanggan lebih banyak fleksibilitas dalam hal konsumsi pesan dan pengoptimalan biaya, seperti yang ditunjukkan pada diagram berikut, berdasarkan pada. [Kasus penggunaan contoh topik Amazon SNS FIFO](fifo-example-use-case.md)

![\[Contoh sistem pengiriman pesan dalam topik Amazon SNS FIFO (First-In-First-Out), menyoroti bagaimana pesan dikirim secara konsisten dalam urutan yang ketat ke antrian Amazon SQS FIFO. Ini kontras dengan perilaku antrian standar Amazon SQS, di mana pesan mungkin keluar dari urutan dan lebih dari sekali. Contoh ini menampilkan tiga jenis pelanggan yang berbeda—fungsi analitik, aplikasi grosir, dan aplikasi ritel—yang menunjukkan bagaimana masing-masing menerima pesan baik dalam urutan yang ketat atau dalam urutan upaya terbaik tergantung pada jenis antrian yang mereka ikuti.\]](http://docs.aws.amazon.com/id_id/sns/latest/dg/images/sns-fifo-ordering-1.png)


Perhatikan bahwa tidak ada pemesanan tersirat dari pelanggan. Contoh berikut menunjukkan bahwa pesan **m1** dikirim pertama ke pelanggan grosir dan kemudian ke pelanggan ritel dan kemudian ke pelanggan analitik. Pesan **m2** dikirim pertama ke pelanggan ritel dan kemudian ke pelanggan grosir dan akhirnya ke pelanggan analitik. Meskipun kedua pesan dikirim ke pelanggan dalam urutan yang berbeda, pemesanan pesan dipertahankan untuk setiap pelanggan Amazon SQS FIFO. Setiap pelanggan dianggap terpisah dari pelanggan lain.

![\[Contoh bagaimana topik Amazon SNS FIFO dan berbagai jenis pelanggan, termasuk Amazon SQS FIFO dan antrian standar, menangani pemesanan dan pengiriman pesan. Ini menunjukkan bahwa pesan dipublikasikan ke suatu topik dan dikirim ke berbagai jenis antrian — memastikan pengiriman pesanan untuk antrian FIFO dan pemesanan upaya terbaik untuk antrian standar. Pengaturan ini mendukung skenario dalam platform e-commerce di mana komponen yang berbeda memerlukan pengiriman pesan yang andal dalam urutan tertentu untuk pemrosesan yang akurat.\]](http://docs.aws.amazon.com/id_id/sns/latest/dg/images/sns-fifo-ordering-2.png)


Jika pelanggan antrian Amazon SQS menjadi tidak dapat dijangkau, itu bisa keluar dari sinkronisasi. Sebagai contoh, mengatakan pemilik antrean aplikasi grosir keliru mengubah [ kebijakan antrean Amazon SQS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-using-identity-based-policies.html) dengan cara yang mencegah layanan utama Amazon SNS mengirimkan pesan ke antrean. Dalam hal ini, pengiriman pembaruan harga ke antrian grosir gagal, sedangkan antrian ritel dan analitik berhasil, menyebabkan pelanggan tidak sinkron. Ketika pemilik antrian aplikasi grosir mengoreksi kebijakan antreannya, Amazon SNS melanjutkan pengiriman pesan ke antrian berlangganan. Setiap pesan yang dipublikasikan ke topik yang menargetkan antrian yang tidak dikonfigurasi dengan benar akan dihapus, kecuali langganan terkait memiliki antrian [huruf mati yang](sns-dead-letter-queues.md) dikonfigurasi.

![\[Contoh perilaku pengiriman pesan dalam penyiapan Amazon SNS FIFO di mana pesan dipublikasikan ke berbagai jenis pelanggan (grosir, eceran, dan analitik) melalui antrian Amazon SQS. Ini menyoroti dampak kesalahan konfigurasi kebijakan antrian pada sinkronisasi pengiriman pesan di berbagai antrian pelanggan. Contoh menunjukkan bagaimana pengiriman pesan gagal untuk pelanggan grosir karena kesalahan kebijakan, tetapi berlanjut dengan sukses untuk pelanggan ritel dan analitik, menekankan pentingnya konfigurasi antrian yang benar untuk mempertahankan pengiriman data yang disinkronkan. Skenario ini menggarisbawahi kemampuan topik FIFO untuk memastikan pengiriman yang teratur dan tepat sekali dalam keadaan normal dan konsekuensi dari kesalahan konfigurasi.\]](http://docs.aws.amazon.com/id_id/sns/latest/dg/images/sns-fifo-ordering-3.png)


Anda dapat memiliki beberapa aplikasi (atau beberapa thread dalam aplikasi yang sama) menerbitkan pesan ke topik SNS FIFO secara paralel. Ketika Anda melakukan ini, Anda secara efektif mendelegasikan urutan pesan ke layanan Amazon SNS. Untuk menentukan urutan pesan yang telah ditetapkan, Anda dapat memeriksa nomor urutannya.

Nomor urut adalah angka besar dan tidak berurutan yang diberikan Amazon SNS untuk setiap pesan. Panjang nomor urut adalah 128-bit, dan terus meningkat untuk setiap Grup [Pesan](fifo-message-grouping.md). Nomor urut diteruskan ke antrian Amazon SQS berlangganan sebagai bagian dari badan pesan. Namun, jika Anda mengaktifkan [pengiriman pesan mentah](sns-large-payload-raw-message-delivery.md), pesan yang dikirimkan ke antrean Amazon SQS tidak menyertakan nomor urut atau metadata pesan Amazon SNS lainnya.

![\[Contoh beberapa fungsi Lambda mempublikasikan pesan ke topik Amazon SNS FIFO (First In, First Out), yang kemudian mengirimkan pesan-pesan ini ke antrean Amazon SQS FIFO, menjaga urutan pemrosesan pesan yang ketat. Pengaturan ini digunakan untuk memastikan bahwa pesan diproses dalam urutan yang tepat mereka dikirim ke berbagai komponen aplikasi, dengan nomor urut yang menunjukkan urutan untuk setiap pesan dalam grup. Jenis konfigurasi ini sangat penting untuk aplikasi di mana urutan operasi dan pesan harus dijaga ketat untuk memastikan konsistensi.\]](http://docs.aws.amazon.com/id_id/sns/latest/dg/images/sns-fifo-ordering-4.png)


Topik Amazon SNS FIFO mendefinisikan pemesanan dalam konteks grup pesan. Untuk informasi selengkapnya, lihat [Pengelompokan pesan Amazon SNS untuk topik FIFO](fifo-message-grouping.md).

# Pengelompokan pesan Amazon SNS untuk topik FIFO
<a name="fifo-message-grouping"></a>

Pesan yang termasuk dalam grup yang sama diproses satu per satu, dalam urutan yang ketat relatif terhadap grup. 

Ketika Anda mempublikasikan pesan ke topik Amazon SNS FIFO, Anda menetapkan ID grup pesan. ID grup adalah token wajib yang menentukan bahwa pesan milik grup pesan tertentu. Topik SNS FIFO melewati ID grup untuk antrean Amazon SQS FIFO berlangganan. Tidak ada batasan jumlah grup IDs dalam topik SNS FIFO atau antrian SQS FIFO. ID grup pesan tidak diteruskan ke antrian standar Amazon SQS.

Tidak ada afinitas antara grup pesan dan langganan. Oleh karena itu, pesan yang dipublikasikan ke grup pesan akan dikirim ke semua antrian langganan, tunduk pada kebijakan filter yang dilampirkan ke langganan. Untuk informasi lebih lanjut, lihat [Pengiriman pesan Amazon SNS untuk topik FIFO](fifo-message-delivery.md) dan [Pemfilteran pesan Amazon SNS untuk topik FIFO](fifo-message-filtering.md).

Di [bagian auto manajemen harga contoh kasus penggunaan](fifo-example-use-case.md), ada grup pesan khusus untuk setiap produk yang dijual di platform. Topik Amazon SNS FIFO yang sama digunakan untuk memproses semua pembaruan harga. Urutan pembaruan harga dipertahankan dalam konteks produk suku cadang mobil tunggal, namun tidak di berbagai produk. Diagram berikut menunjukkan bagaimana inii bekerja. **Perhatikan bahwa, untuk produk yang ID grup pesannya adalah **product-214**, pesan **m1 diproses sebelum m4**.** Urutan ini dipertahankan di seluruh alur kerja yang menggunakan Amazon SNS FIFO ke Amazon SQS FIFO. **Demikian juga, untuk produk yang ID grup pesannya adalah **product-799**, pesan **m2** diproses sebelum m3.** Namun, saat menggunakan antrian standar Amazon SQS, urutan pesan tidak lagi dijamin, dan grup pesan tidak ada. Grup pesan **produk-214** dan **produk-799** terpisah satu sama lain, sehingga tidak ada hubungan antara urutan pesan mereka.

![\[Contoh cara kerja pengurutan pesan dan deduplikasi dalam skenario topik Amazon SNS FIFO yang melibatkan Layanan AWS grup berbeda dan pesan. IDs Ini menunjukkan aliran pesan dari fungsi Lambda melalui topik Amazon SNS FIFO ke berbagai jenis antrian Amazon SQS (FIFO dan standar), menjaga ketertiban ketat dalam antrian FIFO sambil menunjukkan potensi gangguan dalam antrian standar. Pengaturan ini digunakan untuk menekankan pentingnya pengurutan pesan dalam aplikasi seperti pembaruan harga di platform e-niaga, menyoroti bagaimana setiap grup pesan mempertahankan pesanannya secara independen di berbagai layanan konsumen.\]](http://docs.aws.amazon.com/id_id/sns/latest/dg/images/sns-fifo-grouping.png)


## Mendistribusikan data dengan grup pesan IDs untuk meningkatkan kinerja
<a name="fifo-message-grouping-message-group-ids"></a>

Untuk mengoptimalkan throughput pengiriman, topik Amazon SNS FIFO mengirimkan pesan dari grup pesan yang berbeda secara paralel, sementara urutan pesan dijaga ketat dalam setiap grup pesan. Setiap grup pesan individu dapat mengirimkan maksimal 300 pesan per detik. Oleh karena itu, untuk mencapai throughput tinggi untuk satu topik, gunakan sejumlah besar grup IDs pesan yang berbeda. Dengan memanfaatkan kumpulan grup pesan yang beragam, topik Amazon SNS FIFO secara otomatis mendistribusikan pesan di sejumlah besar partisi paralel.

**catatan**  
Topik Amazon SNS FIFO dioptimalkan untuk distribusi pesan yang seragam di seluruh grup pesan IDs, terlepas dari jumlah grup. AWS merekomendasikan agar Anda menggunakan sejumlah besar grup pesan yang berbeda IDs untuk kinerja yang dioptimalkan.

Saat memublikasikan ke topik FIFO Amazon SNS Anda dengan throughput tinggi dan satu atau lebih antrian FIFO Amazon SQS berlangganan, disarankan agar Anda mengaktifkan throughput tinggi pada antrian Anda. Untuk selengkapnya lihat [Throughput tinggi untuk antrian FIFO di Panduan Pengembang](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/high-throughput-fifo.html) Layanan *Antrian Sederhana Amazon*.

# Pengiriman pesan Amazon SNS untuk topik FIFO
<a name="fifo-message-delivery"></a>

Topik Amazon SNS FIFO (masuk pertama, keluar pertama) mendukung pengiriman ke standar Amazon SQS dan antrian FIFO untuk memberikan fleksibilitas dan kontrol kepada pelanggan saat mengintegrasikan aplikasi terdistribusi yang memerlukan konsistensi data dalam waktu dekat.

Untuk beban kerja yang perlu mempertahankan urutan pesan atau de-duplikasi yang ketat, kombinasi topik Amazon SNS FIFO dengan antrian [Amazon SQS FIFO](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/FIFO-queues.html) berlangganan karena titik akhir pengiriman menyediakan peningkatan pesan antar aplikasi saat urutan operasi dan peristiwa sangat penting, atau di mana duplikat tidak dapat ditoleransi.

Untuk beban kerja yang mentolerir pemesanan dan at-least-once pengiriman upaya terbaik, berlangganan [antrian standar Amazon SQS ke](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/standard-queues.html) topik Amazon SNS FIFO memberikan kemampuan untuk menurunkan biaya, selain berbagi antrian di seluruh beban kerja yang tidak menggunakan FIFO.

**catatan**  
Untuk menyebarkan pesan dari topik Amazon SNS FIFO ke AWS Lambda fungsi, diperlukan langkah-langkah tambahan. Pertama, berlangganan Amazon SQS FIFO atau antrian standar ke topik. Kemudian konfigurasikan antrean untuk memicu fungsi. Untuk informasi lebih lanjut, lihat posting [ FIFO SQS sebagai sumber peristiwa](https://aws.amazon.com/blogs/compute/new-for-aws-lambda-sqs-fifo-as-an-event-source/) di *Blog Komputasi AWS *. 

Topik FIFO SNS tidak dapat mengirimkan pesan ke titik akhir yang dikelola pelanggan, seperti alamat email, aplikasi seluler, nomor telepon untuk olahpesan teks (SMS), atau titik akhir HTTP(S). Jenis titik akhir ini tidak dijamin untuk mempertahankan pengurutan pesan yang ketat. Upaya untuk berlangganan titik akhir yang dikelola pelanggan ke topik FIFO SNS mengakibatkan kesalahan.

Topik FIFO SNS mendukung kemampuan pemfilteran pesan yang sama dengan topik standar. Untuk informasi selengkapnya, lihat [Pemfilteran pesan Amazon SNS untuk topik FIFO](fifo-message-filtering.md) dan posting [ Sederhanakan Olahpesan Pub/Sub Anda dengan Pemfilteran Pesan Amazon SNS](https://aws.amazon.com/blogs/compute/simplify-pubsub-messaging-with-amazon-sns-message-filtering/) di *Blog Komputasi AWS *.

# Pemfilteran pesan Amazon SNS untuk topik FIFO
<a name="fifo-message-filtering"></a>

Topik FIFO Amazon SNS mendukung pemfilteran pesan. Menggunakan pemfilteran pesan menyederhanakan arsitektur Anda dengan membongkar logika perutean pesan dari sistem penerbit Anda dan logika pemfilteran pesan dari sistem pelanggan Anda.

Saat Anda berlangganan Amazon SQS FIFO atau antrian standar ke topik SNS FIFO, Anda dapat menggunakan pemfilteran pesan untuk menentukan bahwa pelanggan menerima subset pesan, bukan semuanya. Setiap pelanggan dapat menetapkan kebijakan filternya sendiri sebagai atribut langganan. Berdasarkan cakupan kebijakan filter, kebijakan filter dicocokkan dengan atribut pesan atau isi pesan yang masuk. Jika kebijakan filter cocok, topik akan mengirimkan salinan pesan ke pelanggan. Jika tidak ada kecocokan, topik tidak akan mengirimkan salinan pesan.

Dalam [kasus penggunaan contoh manajemen harga suku cadang mobil](fifo-example-use-case.md), asumsikan bahwa kebijakan filter Amazon SNS berikut ditetapkan dan cakupan kebijakan filter adalah: `MessageBody`
+ Untuk antrian grosir, kebijakan filter `{"business":["wholesale"]}` cocok dengan setiap pesan yang berisi kunci bernama `business` dan dengan `wholesale` dalam kumpulan nilai. Dalam diagram berikut, salah satu kunci dalam pesan **m1** adalah `business` dengan nilai. `wholesale` Salah satu kunci dalam pesan **m3** adalah `business` dengan nilai. `["wholesale,retail"]` Dengan demikian, **m1** dan **m3** sesuai dengan kriteria kebijakan filter, dan kedua pesan tersebut dikirim ke antrean grosir.
+ Untuk antrian ritel, kebijakan filter `{"business":["retail"]}` cocok dengan setiap pesan yang berisi kunci bernama `business` dan dengan `retail` dalam kumpulan nilai. Dalam diagram, salah satu kunci dalam pesan **m2** adalah `business` dengan nilai`retail`. Salah satu kunci dalam pesan **m3** adalah `business` dengan nilai. `["wholesale,retail"]` Dengan demikian, **m2** dan **m3** sesuai dengan kriteria kebijakan filter, dan kedua pesan tersebut dikirim ke antrean ritel.
+ Untuk antrian analitik, kami ingin Amazon Athena menerima semua catatan, jadi tidak ada kebijakan filter yang diterapkan.

![\[Contoh bagaimana topik Amazon SNS FIFO menggunakan kebijakan filter untuk merutekan pesan ke antrian Amazon SQS yang berbeda berdasarkan konten pesan. Pesan m1 dan m3 dengan kunci “bisnis” disetel ke “grosir” dikirim ke antrian grosir, sementara pesan m2 dengan rute “eceran” yang ditentukan ke antrian ritel. Ini menunjukkan pengiriman pesan yang ditargetkan, memastikan bahwa hanya pesan yang relevan yang diterima oleh setiap fungsi pelanggan, mengoptimalkan efisiensi pemrosesan dan relevansi data.\]](http://docs.aws.amazon.com/id_id/sns/latest/dg/images/sns-fifo-filtering.png)


Topik FIFO SNS mendukung berbagai operator yang cocok, termasuk nilai string atribut, nilai numerik atribut, dan kunci atribut. Untuk informasi selengkapnya, lihat [Pemfilteran pesan Amazon SNS](sns-message-filtering.md).

Topik FIFO SNS tidak mengirimkan pesan duplikat ke titik akhir langganan. Untuk informasi selengkapnya, lihat [Deduplikasi pesan Amazon SNS untuk topik FIFO](fifo-message-dedup.md).

# Deduplikasi pesan Amazon SNS untuk topik FIFO
<a name="fifo-message-dedup"></a>

 Topik FIFO Amazon SNS dan antrean FIFO Amazon SQS mendukung deduplikasi pesan, yang menyediakan pengiriman dan pemrosesan pesan tepat satu kali selama syarat berikut terpenuhi:
+ Antrian Amazon SQS FIFO berlangganan ada dan memiliki izin yang memungkinkan kepala layanan Amazon SNS untuk mengirimkan pesan ke antrian.
+ Konsumen antrian Amazon SQS FIFO memproses pesan dan menghapusnya dari antrian sebelum batas waktu visibilitas berakhir.
+ Topik langganan Amazon SNS tidak memiliki [pemfIlteran pesan](fifo-message-filtering.md). Saat Anda mengonfigurasi pemfilteran pesan, topik Amazon SNS FIFO at-most-once mendukung pengiriman, karena pesan dapat disaring berdasarkan kebijakan filter langganan Anda.
+ Tidak ada gangguan jaringan yang mencegah perizinan pengiriman pesan.

**catatan**  
Deduplikasi pesan berlaku untuk seluruh topik Amazon SNS FIFO saat atribut topik disetel ke. `FifoThroughputScope` `Topic` Ketika atribut topik `FifoThroughputScope` disetel ke`MessageGroup`, deduplikasi pesan berlaku untuk setiap grup [pesan](fifo-message-grouping.md) individual.

Saat Anda memublikasikan pesan ke topik Amazon SNS FIFO, pesan tersebut harus menyertakan ID deduplikasi. ID ini disertakan dalam pesan yang disampaikan oleh topik Amazon SNS FIFO ke antrian FIFO Amazon SQS berlangganan.

Jika pesan dengan ID deduplikasi tertentu berhasil dipublikasikan ke topik Amazon SNS FIFO, pesan apa pun yang diterbitkan dengan ID deduplikasi yang sama, dalam interval deduplikasi lima menit, diterima tetapi tidak dikirim. Topik Amazon SNS FIFO terus melacak ID deduplikasi pesan, pada lingkup deduplikasi yang dikonfigurasi oleh atribut topik`FifoThroughputScope`, bahkan setelah pesan dikirim ke titik akhir berlangganan.

Jika badan pesan dijamin unik untuk setiap pesan yang dipublikasikan, Anda dapat mengaktifkan deduplikasi berbasis konten untuk topik FIFO Amazon SNS dan antrian FIFO Amazon SQS berlangganan. Amazon SNS menggunakan isi pesan untuk menghasilkan nilai hash unik untuk digunakan sebagai ID deduplikasi untuk setiap pesan, sehingga Anda tidak perlu mengatur ID deduplikasi ketika Anda mengirim setiap pesan.

**catatan**  
Atribut pesan tidak termasuk dalam perhitungan hash.

Saat deduplikasi berbasis konten diaktifkan untuk topik Amazon SNS FIFO, dan pesan dipublikasikan dengan ID deduplikasi, ID deduplikasi yang dipublikasikan akan mengganti ID deduplikasi berbasis konten yang dihasilkan.

Di [contoh kasus penggunaan manajemen harga suku cadang mobil](fifo-example-use-case.md), perusahaan harus mengatur ID deduplikasi yang unik secara universal untuk setiap pembaruan harga. Hal ini karena isi pesan bisa jadi identik bahkan ketika atribut pesan berbeda untuk grosir dan ritel. Namun, jika perusahaan menambahkan jenis bisnis (grosir atau eceran) ke badan pesan di samping ID produk dan harga produk, mereka dapat mengaktifkan duplikasi berbasis konten dalam topik Amazon SNS FIFO dan antrian FIFO Amazon SQS berlangganan.

![\[Cara kerja deduplikasi pesan di lingkungan topik Amazon SNS FIFO (First In, First Out), menggunakan contoh manajemen harga suku cadang mobil. Ini menunjukkan bagaimana pesan duplikat (m1) yang diterbitkan ke topik Amazon SNS FIFO dicegah dikirim beberapa kali ke sistem pelanggan (antrian grosir, eceran, dan analitik). Deduplikasi ini memastikan bahwa hanya pesan unik yang diproses, meningkatkan efisiensi dan akurasi dalam penanganan pesan di berbagai fungsi pelanggan.\]](http://docs.aws.amazon.com/id_id/sns/latest/dg/images/sns-fifo-dedup.png)


Selain pemesanan pesan dan deduplikasi, topik Amazon SNS FIFO mendukung enkripsi sisi server pesan (SSE) dengan AWS KMS kunci, dan privasi pesan melalui titik akhir VPC dengan. AWS PrivateLink Untuk informasi selengkapnya, lihat [Keamanan pesan Amazon SNS untuk topik FIFO](fifo-message-security.md).

# Keamanan pesan Amazon SNS untuk topik FIFO
<a name="fifo-message-security"></a>

[https://aws.amazon.com/kms/](https://aws.amazon.com/kms/)
+ Anda dapat membuat topik dan antrian FIFO terenkripsi baru atau mengaktifkan enkripsi untuk yang sudah ada.
+ Hanya badan pesan yang dienkripsi. Atribut pesan, metadata sumber daya, dan metrik sumber daya tetap tidak terenkripsi. 

**catatan**  
Menambahkan enkripsi ke topik FIFO atau antrean tidak mengenkripsi pesan yang disimpan kembali, dan menghapus enkripsi dari topik atau antrean meninggalkan pesan yang tersimpan terenkripsi.

Topik SNS FIFO mendekripsi pesan segera sebelum mengirimkannya ke titik akhir berlangganan. Antrean SQS FIFO mendekripsi pesan sebelum mengembalikan mereka ke aplikasi konsumen. Untuk informasi selengkapnya, lihat [Enkripsi data Amazon SNS](sns-data-encryption.md) dan [ Mengenkripsi pesan yang dipublikasikan ke Amazon SNS dengan posting AWS KMS](https://aws.amazon.com/blogs/compute/encrypting-messages-published-to-amazon-sns-with-aws-kms/) di *AWS Komputasi Blog*.

Selain itu, topik FIFO SNS dan antrean SQS FIFO mendukung privasi pesan dengan [antarmuka titik akhir VPC](https://docs.aws.amazon.com/vpc/latest/userguide/vpce-interface.html) didukung oleh AWS PrivateLink. Menggunakan titik akhir antarmuka, Anda dapat mengirim pesan dari subnet Amazon Virtual Private Cloud (Amazon VPC) ke topik dan antrean FIFO tanpa melintasi internet publik. Model ini menyimpan pesan Anda dalam AWS infrastruktur dan jaringan, yang meningkatkan keamanan keseluruhan aplikasi Anda. Saat Anda menggunakannya AWS PrivateLink, Anda tidak perlu menyiapkan gateway internet, terjemahan alamat jaringan (NAT), atau jaringan pribadi virtual (VPN). Untuk informasi selengkapnya, lihat [Mengamankan lalu lintas Amazon SNS dengan titik akhir VPC](sns-internetwork-traffic-privacy.md) dan [Mengamankan pesan yang dipublikasikan ke Amazon SNS dengan posting AWS PrivateLink](https://aws.amazon.com/blogs/security/securing-messages-published-to-amazon-sns-with-aws-privatelink) di *AWS Blog Keamanan*.

Topik SNS FIFO juga mendukung antrean surat mati dan penyimpanan pesan di seluruh Availability Zones. Untuk informasi selengkapnya, lihat [Daya tahan pesan Amazon SNS untuk topik FIFO](fifo-message-durability.md).

# Daya tahan pesan Amazon SNS untuk topik FIFO
<a name="fifo-message-durability"></a>

Topik Amazon SNS FIFO dan antrian Amazon SQS tahan lama. Kedua jenis sumber daya ini menyimpan pesan secara redundan di beberapa Availability Zone, dan menyediakan antrean surat mati untuk menangani kasus luar biasa.

Di Amazon SNS, pengiriman pesan gagal ketika topik Amazon SNS tidak dapat mengakses antrean Amazon SQS langganan karena kesalahan sisi klien atau sisi server:
+ Kesalahan sisi klien terjadi ketika topik Amazon SNS FIFO memiliki metadata langganan basi. Dua penyebab umum kesalahan sisi klien adalah ketika pemilik antrian Amazon SQS melakukan salah satu hal berikut:
  + Menghapus antrean.
  + Mengubah kebijakan antrean dengan cara yang mencegah perwakilan layanan Amazon SNS mengirimkan pesan ke sana.

  Amazon SNS tidak mencoba lagi mengirimkan pesan yang gagal karena kesalahan sisi klien.
+ Kesalahan sisi server dapat terjadi dalam situasi ini:
  + Layanan Amazon SQS tidak tersedia.
  + Amazon SQS gagal memproses permintaan yang valid dari layanan Amazon SNS.

  Ketika kesalahan sisi server terjadi, topik Amazon SNS FIFO mencoba kembali pengiriman yang gagal hingga 100.015 kali selama 23 hari. Untuk informasi selengkapnya, lihat [Pengiriman ulang pesan Amazon SNS](sns-message-delivery-retries.md).

Untuk semua jenis kesalahan, Amazon SNS dapat mengesampingkan pesan ke antrean surat mati Amazon SQS sehingga data tidak hilang.

Di Amazon SQS, pemrosesan pesan gagal ketika aplikasi konsumen gagal untuk menerima pesan, memprosesnya, dan menghapusnya dari antrean. Ketika jumlah maksimum penerimaan permintaan gagal, Amazon SQS dapat mengesampingkan pesan ke antrean surat mati sehingga data tidak hilang.

Dalam [kasus penggunaan contoh manajemen harga suku cadang mobil](fifo-example-use-case.md), perusahaan dapat menetapkan antrian surat mati Amazon SQS (DLQ) untuk setiap langganan topik Amazon SNS FIFO, serta untuk setiap antrian Amazon SQS yang berlangganan. Ini melindungi perusahaan dari kerugian pembaruan harga.

![\[Contoh bagaimana antrian surat mati (DLQs) terintegrasi dengan topik Amazon SNS FIFO dan antrian Amazon SQS untuk memastikan keandalan pesan dalam sistem manajemen harga suku cadang mobil. Ini menunjukkan pengaturan di mana setiap langganan Amazon SNS FIFO untuk tujuan grosir, eceran, dan analitik dipasangkan dengan Amazon SQS FIFO atau antrian standar yang sesuai, masing-masing dilengkapi dengan DLQ yang cocok dengan tipenya sendiri untuk melindungi terhadap kehilangan pesan karena kegagalan pemrosesan.\]](http://docs.aws.amazon.com/id_id/sns/latest/dg/images/sns-fifo-dlq.png)


Antrian surat mati yang terkait dengan langganan Amazon SNS harus berupa antrian Amazon SQS dengan jenis yang sama dengan antrian berlangganan. Misalnya, langganan Amazon SNS FIFO untuk antrian FIFO Amazon SQS harus memiliki antrian Amazon SQS FIFO sebagai antrian huruf mati. Demikian pula, langganan Amazon SNS FIFO untuk antrian standar Amazon SQS harus memiliki antrian standar Amazon SQS sebagai antrian huruf mati. *Untuk informasi selengkapnya, lihat [Antrian surat mati Amazon SNS](sns-dead-letter-queues.md) dan [Mendesain aplikasi tanpa server yang tahan DLQs lama dengan Amazon SNS, Amazon SQS AWS Lambda](https://aws.amazon.com/blogs/compute/designing-durable-serverless-apps-with-dlqs-for-amazon-sns-amazon-sqs-aws-lambda/ ), posting di Compute Blog.AWS *

Untuk ketahanan yang lebih lama untuk membantu pemulihan dari kegagalan hilir, pemilik topik juga dapat menggunakan topik FIFO untuk mengarsipkan pesan hingga 365 hari. Pelanggan topik kemudian dapat memutar ulang pesan tersebut ke titik akhir berlangganan untuk memulihkan pesan yang hilang karena kegagalan dalam aplikasi hilir, atau untuk mereplikasi status aplikasi yang ada. Untuk lebih lanjut, lihat[Pengarsipan dan pemutaran ulang pesan Amazon SNS untuk topik FIFO](fifo-message-archiving-replay.md).

# Pengarsipan dan pemutaran ulang pesan Amazon SNS untuk topik FIFO
<a name="fifo-message-archiving-replay"></a>

## Apa itu pengarsipan dan pemutaran ulang pesan?
<a name="what-is-message-archiving-and-replay"></a>

Amazon SNS menyediakan fitur pengarsipan dan pemutaran ulang pesan tanpa kode, yang dirancang khusus untuk topik FIFO (First-In-First-Out). Fitur ini memungkinkan pemilik topik untuk menyimpan pesan langsung dalam arsip topik hingga 365 hari dan memutarnya kembali ke pelanggan bila diperlukan. Pengarsipan dan pemutaran ulang pesan sangat penting untuk memulihkan pesan yang hilang dan menyinkronkan aplikasi di seluruh wilayah atau sistem dengan mereplikasi status.

Fungsionalitas ini dapat diakses melalui AWS API, SDK CloudFormation, dan Konsol Manajemen AWS.

**Kasus penggunaan kunci**
+ **Pemulihan pesan** - Memulihkan pesan yang hilang karena kegagalan aplikasi hilir dengan memutar ulang ke titik akhir pelanggan.
+ **Replikasi status** - Mereplikasi status sistem yang ada di lingkungan baru dengan memutar ulang pesan yang dimulai dari stempel waktu tertentu.
+ **Koreksi kesalahan** - Kirim ulang pesan yang tidak terjawab selama pemadaman untuk memastikan semua peristiwa diproses dengan benar.

### Komponen pengarsipan dan pemutaran ulang pesan
<a name="message-archiving-and-replay-components"></a>

Kelola pengarsipan dan pemutaran ulang pesan untuk topik Amazon SNS FIFO, termasuk menyetel periode penyimpanan, memantau pesan yang diarsipkan CloudWatch menggunakan, memulai pemutaran ulang melalui atribut langganan, dan memahami izin yang diperlukan untuk memodifikasi dan memulai pemutaran ulang.

**Pengarsipan pesan**
+ Pemilik topik mengaktifkan fitur pengarsipan dan menetapkan periode penyimpanan pesan, yang bisa sampai 365 hari. Untuk lebih lanjut, lihat [Pengarsipan pesan Amazon SNS untuk pemilik topik FIFO](message-archiving-and-replay-topic-owner.md)
+ CloudWatch metrik membantu memantau pesan yang diarsipkan.

**Putar ulang pesan**
+ Pelanggan memulai pemutaran ulang, memilih jendela waktu untuk pesan yang akan diproses ulang ke titik akhir berlangganan. Untuk lebih lanjut lihat,[Ulangan pesan Amazon SNS untuk pelanggan topik FIFO](message-archiving-and-replay-subscriber.md). 
+ Anda mengelola pemutaran ulang melalui atribut berlangganan menggunakan `ReplayPolicy` fitur tersebut.

**Izin yang relevan**
+ **`SetSubscriptionAttributes`**— Diperlukan untuk mengkonfigurasi atau memodifikasi pengaturan replay menggunakan `ReplayPolicy` atribut pada langganan.
+ **`Subscribe`**— Diperlukan untuk melampirkan langganan baru dan memulai replay.
+ **`GetTopicAttributes`**— Memungkinkan melihat properti topik, tetapi inisiasi replay terutama berkisar pada manajemen berlangganan.

# Pengarsipan pesan Amazon SNS untuk pemilik topik FIFO
<a name="message-archiving-and-replay-topic-owner"></a>

Pengarsipan pesan menyediakan kemampuan untuk mengarsipkan satu salinan dari semua pesan yang dipublikasikan ke topik Anda. Anda dapat menyimpan pesan yang dipublikasikan dalam topik Anda dengan mengaktifkan kebijakan arsip pesan pada topik, yang memungkinkan pengarsipan pesan untuk semua langganan yang ditautkan ke topik tersebut. Pesan dapat diarsipkan minimal satu hari hingga maksimal 365 hari.

Biaya tambahan berlaku saat menetapkan kebijakan arsip. Untuk informasi harga, lihat harga [Amazon SNS](https://aws.amazon.com/sns/pricing/).

## Membuat kebijakan arsip pesan menggunakan Konsol Manajemen AWS
<a name="message-archiving-and-replay-topic-console"></a>

Gunakan opsi ini untuk membuat kebijakan arsip pesan baru menggunakan Konsol Manajemen AWS.

1. Masuk ke [Konsol Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Pilih topik atau buat yang baru. Untuk mempelajari lebih lanjut tentang membuat topik, lihat [Membuat topik Amazon SNS](sns-create-topic.md).
**catatan**  
Pengarsipan dan pemutaran ulang pesan Amazon SNS hanya tersedia untuk topik FIFO application-to-application (A2A).

1. Pada halaman **Edit topik**, perluas bagian **Kebijakan arsip**.

1. Aktifkan fitur **Kebijakan arsip**, dan masukkan **jumlah hari** yang ingin Anda arsipkan pesan dalam topik.

1. Pilih **Simpan perubahan**.

**Untuk melihat, mengedit, dan menonaktifkan kebijakan topik pengarsipan pesan**
+ Pada halaman **Detail topik**, **kebijakan Retensi** menampilkan status kebijakan arsip, termasuk jumlah hari yang disetel. Pilih tab **Kebijakan arsip** untuk melihat detail arsip pesan berikut:
  + **Status — Status** arsip dan pemutaran ulang muncul sebagai **aktif** saat kebijakan arsip diterapkan. Status arsip dan pemutaran ulang muncul sebagai **tidak aktif** saat kebijakan arsip disetel ke objek JSON kosong.
  + **Periode penyimpanan pesan** — Jumlah hari yang ditentukan untuk penyimpanan pesan.
  + **Tanggal mulai arsip** — Tanggal dari mana pelanggan dapat memutar ulang pesan.
  + **Pratinjau JSON - Pratinjau** JSON dari kebijakan arsip.
+ (Opsional) Untuk **mengedit** kebijakan arsip, buka halaman ringkasan topik dan pilih **Edit**.
+ (Opsional) Untuk **menonaktifkan** kebijakan arsip, buka halaman ringkasan topik dan pilih **Edit**. Nonaktifkan **Kebijakan Arsip** dan pilih **Simpan perubahan**.
+ (Opsional) Untuk **menghapus** topik dengan kebijakan arsip, Anda harus terlebih dahulu menonaktifkan kebijakan arsip seperti yang dijelaskan sebelumnya.
**penting**  
Untuk menghindari penghapusan pesan yang tidak disengaja, Anda tidak dapat menghapus topik dengan kebijakan arsip pesan aktif. Kebijakan arsip pesan topik harus dinonaktifkan sebelum topik dapat dihapus. Saat Anda menonaktifkan kebijakan arsip pesan, Amazon SNS akan menghapus semua pesan yang diarsipkan. Saat menghapus topik, langganan dihapus, dan pesan apa pun yang sedang transit mungkin tidak terkirim.

## Membuat kebijakan arsip pesan menggunakan API
<a name="message-archiving-and-replay-topic-api"></a>

Untuk membuat kebijakan arsip pesan menggunakan API, Anda perlu menambahkan atribut `ArchivePolicy` ke topik Anda. Anda dapat mengatur `ArchivePolicy` menggunakan tindakan API `CreateTopic` dan`SetTopicAttributes`. `ArchivePolicy`memiliki nilai tunggal,`MessageRetentionPeriod`, yang mewakili jumlah hari Amazon SNS menyimpan pesan. Untuk mengaktifkan pengarsipan pesan untuk topik Anda, setel `MessageRetentionPeriod` ke nilai integer lebih besar dari nol. Misalnya, untuk menyimpan pesan dalam arsip Anda selama 30 hari, setel `ArchivePolicy` ke:

```
{
    "ArchivePolicy": {
        "MessageRetentionPeriod": "30"
    }
}
```

Untuk menonaktifkan pengarsipan pesan untuk topik Anda, dan menghapus arsip, batalkan pengaturan`ArchivePolicy`, sebagai berikut:

```
{}
```

## Membuat kebijakan arsip pesan menggunakan SDK
<a name="message-archiving-and-replay-topic-sdk"></a>

Untuk menggunakan AWS SDK, Anda harus mengonfigurasinya dengan kredensil Anda. Untuk informasi selengkapnya, lihat [Berbagi `config` dan `credentials` file](https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html) di *Panduan Referensi Alat AWS SDKs dan Alat*.

Contoh kode berikut menunjukkan cara mengatur topik Amazon SNS `ArchivePolicy` untuk menyimpan semua pesan yang dipublikasikan ke topik selama 30 hari.

```
// Specify the ARN of the Amazon SNS topic to set the ArchivePolicy for.
String topicArn =
    "arn:aws:sns:us-east-2:123456789012:MyArchiveTopic.fifo";

// Set the MessageRetentionPeriod to 30 days for the ArchivePolicy.
String archivePolicy =
    "{\"MessageRetentionPeriod\":\"30\"}";

// Set the ArchivePolicy for the Amazon SNS topic
SetTopicAttributesRequest request = new SetTopicAttributesRequest()
    .withTopicArn(topicArn)
    .withAttributeName("ArchivePolicy")
    .withAttributeValue(archivePolicy);
sns.setTopicAttributes(request);
```

## Membuat kebijakan arsip pesan menggunakan CloudFormation
<a name="message-archiving-and-replay-topic-cfn"></a>

Untuk membuat kebijakan arsip menggunakan CloudFormation lihat [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sns-topic.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sns-topic.html)di *Panduan AWS CloudFormation Pengguna*.

## Berikan akses ke arsip terenkripsi
<a name="message-archiving-and-replay-topic-kms"></a>

Sebelum pelanggan dapat mulai memutar ulang pesan dari topik terenkripsi, Anda harus menyelesaikan langkah-langkah berikut. Karena pesan sebelumnya diputar ulang, Amazon SNS perlu `Decrypt` disediakan akses ke kunci KMS yang digunakan untuk mengenkripsi pesan dalam arsip.

1. Saat Anda mengenkripsi pesan dengan kunci KMS dan menyimpannya dalam topik, Anda harus memberi Amazon SNS kemampuan untuk mendekripsi pesan ini melalui Kebijakan Utama. Untuk lebih lanjut, lihat[Berikan izin dekripsi ke Amazon SNS](#message-archiving-and-replay-topic-decrypt-permissions).

1. Aktifkan AWS KMS untuk Amazon SNS. Untuk lebih lanjut, lihat[Mengkonfigurasi izin AWS KMS](sns-key-management.md#sns-what-permissions-for-sse).

**penting**  
Saat Anda menambahkan bagian baru ke kebijakan kunci KMS Anda, jangan ubah bagian yang ada dalam kebijakan. Jika enkripsi diaktifkan pada suatu topik, dan kunci KMS dinonaktifkan atau dihapus, atau kebijakan kunci KMS tidak dikonfigurasi dengan benar untuk Amazon SNS, Amazon SNS tidak dapat memutar ulang pesan ke pelanggan Anda. 

### Berikan izin dekripsi ke Amazon SNS
<a name="message-archiving-and-replay-topic-decrypt-permissions"></a>

Agar Amazon SNS dapat mengakses pesan terenkripsi dari dalam arsip topik Anda dan memutarnya kembali ke titik akhir berlangganan, Anda harus mengaktifkan prinsip layanan Amazon SNS untuk mendekripsi pesan ini.

Berikut ini adalah contoh kebijakan yang diperlukan untuk mengizinkan prinsipal layanan Amazon SNS mendekripsi pesan yang disimpan selama pemutaran ulang pesan historis dari dalam topik Anda.

```
{
    "Sid": "Allow SNS to decrypt archived messages",
    "Effect": "Allow",
    "Principal": {
        "Service": "sns.amazonaws.com"
    },
    "Action": [
        "kms:Decrypt",
        "kms:GenerateDataKey"
    ],
    "Resource": "*"
}
```

## Pantau metrik arsip pesan menggunakan Amazon CloudWatch
<a name="message-archiving-and-replay-topic-cloudwatch"></a>

Anda dapat memantau pesan yang diarsipkan menggunakan Amazon CloudWatch menggunakan metrik berikut. Agar diberi tahu tentang anomali pada beban kerja Anda dan membantu menghindari dampak, Anda dapat mengonfigurasi CloudWatch alarm Amazon pada metrik ini. Untuk detail selengkapnya, lihat [Pencatatan dan Pemantauan di Amazon SNS](sns-logging-monitoring.md).


| Metrik | Deskripsi | 
| --- | --- | 
|  **ApproximateNumberOfMessagesArchived**  |  Menyediakan pemilik topik dengan jumlah agregat pesan yang diarsipkan dalam arsip topik, pada resolusi 60 menit.  | 
|  **ApproximateNumberOfBytesArchived**   |  Menyediakan pemilik topik dengan jumlah agregat byte yang diarsipkan, di semua pesan dalam arsip topik, pada resolusi 60 menit.  | 
|  **NumberOfMessagesArchiveProcessing**   |  Memberikan pemilik topik dengan jumlah pesan yang disimpan ke arsip topik selama interval dalam resolusi 1 menit.  | 
|  **NumberOfBytesArchiveProcessing**  |  Menyediakan pemilik topik dengan jumlah agregat byte yang disimpan ke arsip topik selama interval dalam resolusi 1 menit.  | 

`GetTopicAttributes`API memiliki `BeginningArchiveTime` properti, yang mewakili stempel waktu tertua di mana pelanggan dapat memulai pemutaran ulang. Berikut ini merupakan contoh respons untuk tindakan API ini:

```
{
 "ArchivePolicy": {
    "MessageRetentionPeriod": "<integer>"
  },
  "BeginningArchiveTime": "<timestamp>",
  ...
}
```

# Ulangan pesan Amazon SNS untuk pelanggan topik FIFO
<a name="message-archiving-and-replay-subscriber"></a>

Pemutaran ulang Amazon SNS memungkinkan pelanggan topik untuk mengambil dan mengirimkan ulang pesan yang diarsipkan dari penyimpanan data topik ke titik akhir berlangganan.
+ Pesan dapat diputar ulang segera setelah langganan dibuat.
+ Pesan yang diputar ulang mempertahankan konten yang sama,`MessageId`, dan `Timestamp` seperti aslinya.
+ Pesan menyertakan `Replayed` atribut untuk menunjukkan bahwa itu adalah pesan yang diputar ulang.
+ Untuk memutar ulang hanya pesan tertentu, terapkan kebijakan filter ke langganan Anda.

Untuk informasi lebih lanjut tentang memfilter pesan, lihat[Filter pesan yang diputar ulang](#message-archiving-and-replay-subscription-filtering).

## Membuat kebijakan pemutaran ulang pesan menggunakan Konsol Manajemen AWS
<a name="message-archiving-and-replay-replaying-console"></a>

Gunakan opsi ini untuk membuat kebijakan replay baru menggunakan. Konsol Manajemen AWS

1. Masuk ke [Konsol Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Pilih langganan topik atau buat yang baru. Untuk mempelajari lebih lanjut tentang membuat langganan, lihat[Membuat langganan ke topik Amazon SNS](sns-create-subscribe-endpoint-to-topic.md).

1. **Untuk memulai pemutaran ulang pesan, buka drop-down Putar ulang dan pilih **Mulai replay**.**

1. Dari modal **Replay timeframe**, buat pilihan berikut:

   1. **Pilih tanggal dan waktu mulai putar ulang - Pilih **tanggal**** (YYYY/MM/DDformat) dan **waktu** (format 24 jam jam: mm: ss) dari mana Anda ingin mulai memutar ulang pesan yang diarsipkan. Waktu mulai harus lebih lambat dari awal perkiraan waktu arsip.

   1. **(Opsional) Pilih tanggal dan waktu akhir pemutaran ulang** - Pilih **tanggal** (YYYY/MM/DDformat) dan **waktu** (format 24 jam jam: mm: ss) saat Anda ingin berhenti memutar ulang pesan yang diarsipkan.

   1. Pilih **Mulai putar ulang**.

1. (Opsional) Untuk **menghentikan pemutaran** ulang pesan, buka halaman **Detail langganan** dan pilih **Hentikan pemutaran ulang dari tarik-turun Putar** **Ulang**.

1. (Opsional) Untuk **memantau** metrik pemutaran ulang pesan dari dalam alur kerja ini menggunakan CloudWatch, lihat. [Pantau metrik pemutaran ulang pesan menggunakan Amazon CloudWatch](#message-archiving-and-replay-subscription-cloudwatch)

**Untuk melihat dan mengedit kebijakan pemutaran ulang pesan**

Anda dapat melakukan tindakan berikut dari halaman **Detail langganan**:
+ Untuk **melihat** status pemutaran ulang pesan, bidang **status Putar ulang** menampilkan nilai berikut:
  + **Selesai** — Putar ulang telah berhasil mengirim ulang semua pesan, dan sekarang mengirimkan pesan yang baru diterbitkan.
  + **Sedang berlangsung** - Putar ulang saat ini memutar ulang pesan yang dipilih.
  + **Gagal** - Pemutaran ulang tidak dapat diselesaikan.
  + **Tertunda** - Status default saat pemutaran ulang dimulai.
+ (Opsional) Untuk **mengubah** kebijakan pemutaran ulang pesan, buka halaman **Detail langganan** dan pilih **Mulai memutar ulang dari tarik-turun Putar** **Ulang**. Memulai replay akan menggantikan replay yang ada.

## Menambahkan kebijakan pemutaran ulang ke langganan menggunakan API
<a name="message-archiving-and-replay-subscription-api"></a>

Untuk memutar ulang pesan yang diarsipkan, gunakan atribut. `ReplayPolicy` `ReplayPolicy`dapat digunakan dengan tindakan `SetSubscriptionAttributes` API `Subscribe` dan. Kebijakan ini memiliki nilai-nilai berikut:
+ **`StartingPoint`**(Wajib) — Sinyal dari mana harus mulai memutar ulang pesan.
+ **`EndingPoint`**(Opsional) — Sinyal kapan harus berhenti memutar ulang pesan. Jika `EndingPoint` dihilangkan, maka pemutaran ulang akan berlanjut hingga terjebak hingga waktu saat ini.
+ **`PointType`**(Wajib) - Mengatur jenis titik awal dan akhir. Saat ini, nilai yang didukung untuk `PointType` adalah`Timestamp`.

Misalnya, untuk memulihkan dari kegagalan hilir dan mengirim ulang semua pesan selama dua jam pada 1 Oktober 2023, gunakan tindakan `SetSubscriptionAttributes` API untuk menetapkan sebagai `ReplayPolicy` berikut:

```
{
  "PointType":"Timestamp", 
  "StartingPoint":"2023-10-01T10:00:00.000Z", 
  "EndingPoint":"2023-10-01T12:00:00.000Z"
}
```

Untuk memutar ulang semua pesan yang dikirim ke topik per 1 Oktober 2023, dan terus menerima semua pesan yang baru diterbitkan ke topik Anda, gunakan tindakan `SetSubscriptionAttributes` API untuk menyetel langganan Anda sebagai berikut: `ReplayPolicy`

```
{
  "PointType":"Timestamp",
  "StartingPoint":"2023-10-01T00:00:00.000Z"
}
```

Untuk memverifikasi bahwa pesan telah diputar ulang, atribut boolean ditambahkan ke setiap pesan yang `Replayed` diputar ulang.

## Menambahkan kebijakan pemutaran ulang ke langganan menggunakan SDK
<a name="message-replay-sdk"></a>

Untuk menggunakan AWS SDK, Anda harus mengonfigurasinya dengan kredensil Anda. Untuk informasi selengkapnya, lihat [Berbagi `config` dan `credentials` file](https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html) di *Panduan Referensi Alat AWS SDKs dan Alat*.

Contoh kode berikut menunjukkan cara mengatur langganan untuk mengirim ulang pesan dari arsip topik Amazon SNS FIFO untuk jangka waktu 2 jam pada 1 Oktober 2023. `ReplayPolicy`

```
// Specify the ARN of the Amazon SNS subscription to initiate the ReplayPolicy on.
String subscriptionArn =
    "arn:aws:sns:us-east-2:123456789012:MyArchiveTopic.fifo:1d2a3e9d-7f2f-447c-88ae-03f1c68294da";

// Set the ReplayPolicy to replay messages from the topic's archive 
// for a 2 hour time period on October 1st 2023 between 10am and 12pm UTC.
String replayPolicy =
    "{\"PointType\":\"Timestamp\",\"StartingPoint\":\"2023-10-01T10:00:00.000Z\",\"EndingPoint\":\"2023-10-01T12:00:00.000Z\"}";

// Set the ArchivePolicy for the Amazon SNS topic
SetSubscriptionAttributesRequest request = new SetSubscriptionAttributesRequest()
    .withSubscriptionArn(subscriptionArn)
    .withAttributeName("ReplayPolicy")
    .withAttributeValue(replayPolicy);
sns.setSubscriptionAttributes(request);
```

## Memahami EndingPoint
<a name="message-archiving-and-replay-understanding-endpoint"></a>

Saat Anda `ReplayPolicy` menerapkan langganan Amazon SNS, `EndingPoint` nilainya opsional. Jika tidak `EndingPoint` disediakan, pemutaran ulang akan dimulai dari yang ditentukan `StartingPoint` dan berlanjut hingga mengikuti waktu saat ini, termasuk memproses pesan yang baru diterbitkan. Setelah tertangkap, langganan akan berfungsi sebagai langganan reguler, menerima pesan baru saat dipublikasikan.

Jika `EndingPoint` ditentukan, layanan akan memutar ulang pesan dari `StartingPoint` atas ke `EndingPoint` dan kemudian berhenti. **Tindakan ini secara efektif menghentikan langganan.** Saat langganan dijeda, pesan yang baru diterbitkan tidak akan dikirimkan ke titik akhir berlangganan.

Untuk melanjutkan pengiriman pesan, terapkan yang baru `ReplayPolicy` tanpa memberikan`EndingPoint`, dan atur `StartingPoint` ke titik waktu yang diinginkan untuk terus menerima pesan. Misalnya, untuk melanjutkan langganan dari tempat pemutaran ulang sebelumnya selesai, atur yang baru `StartingPoint` ke yang disediakan `EndingPoint` sebelumnya.

## Filter pesan yang diputar ulang
<a name="message-archiving-and-replay-subscription-filtering"></a>

Pemfilteran pesan Amazon SNS memungkinkan Anda mengontrol pesan yang diputar ulang yang diputar ulang Amazon SNS ke titik akhir pelanggan Anda. Saat pemfilteran pesan dan pengarsipan pesan diaktifkan, Amazon SNS pertama-tama mengambil pesan dari penyimpanan data topik, lalu menerapkan pesan terhadap langganan. `FilterPolicy` Pesan dikirim ke titik akhir berlangganan saat ada kecocokan, jika tidak, pesan akan disaring. Untuk informasi selengkapnya, lihat [Kebijakan filter langganan Amazon SNS](sns-subscription-filter-policies.md).

## Pantau metrik pemutaran ulang pesan menggunakan Amazon CloudWatch
<a name="message-archiving-and-replay-subscription-cloudwatch"></a>

Anda dapat memantau pesan replay menggunakan Amazon CloudWatch menggunakan metrik berikut. Agar diberi tahu tentang anomali pada beban kerja Anda dan membantu menghindari dampak, Anda dapat mengonfigurasi CloudWatch alarm Amazon pada metrik ini. Untuk detail selengkapnya, lihat [Pencatatan dan Pemantauan di Amazon SNS](sns-logging-monitoring.md).


| Metrik | Deskripsi | 
| --- | --- | 
|  **NumberOfReplayedNotificationsDelivered**  |  Menyediakan pelanggan dengan jumlah agregat pesan yang diputar ulang dari arsip topik, pada resolusi 1 menit.  | 
|  **NumberOfReplayedNotificationsFailed**   |  Menyediakan pelanggan dengan jumlah agregat pesan yang diputar ulang yang gagal disampaikan dari arsip topik, pada resolusi 1 menit.  | 

# Contoh kode Amazon SNS untuk topik FIFO
<a name="fifo-topic-code-examples"></a>

Gunakan contoh kode berikut untuk mengintegrasikan [kasus penggunaan contoh manajemen harga suku cadang mobil](fifo-example-use-case.md) dengan topik FIFO Amazon SNS dan antrian FIFO Amazon SQS atau antrean standar.

## Menggunakan AWS SDK
<a name="fifo-topic-aws-sdks"></a>

Menggunakan AWS SDK, Anda membuat topik Amazon SNS FIFO dengan menyetel `FifoTopic` atributnya. **true** Anda membuat antrean Amazon SQS FIFO dengan menyetel atributnya. `FifoQueue` **true** Juga, Anda harus menambahkan **.fifo** akhiran untuk nama dari setiap sumber daya FIFO. Setelah Anda membuat topik atau antrian FIFO, Anda tidak dapat mengubahnya menjadi topik atau antrian standar.

Contoh kode berikut membuat FIFO dan sumber daya antrian standar ini:
+ Topik Amazon SNS FIFO yang mendistribusikan pembaruan harga
+ Antrian Amazon SQS FIFO yang menyediakan pembaruan ini untuk aplikasi grosir dan eceran
+ Antrian standar Amazon SQS untuk aplikasi analitik yang menyimpan catatan, yang dapat ditanyakan untuk intelijen bisnis (BI)
+ Langganan Amazon SNS FIFO yang menghubungkan tiga antrian ke topik

Contoh ini menetapkan [kebijakan filter](sns-subscription-filter-policies.md) dalam langganan. Jika Anda menguji contoh dengan menerbitkan pesan ke topik, pastikan Anda mempublikasikan pesan dengan `business` atribut. Tentukan baik `retail` atau `wholesale` untuk nilai atribut. Jika tidak, pesan difilter dan tidak dikirim ke antrean berlangganan. Untuk informasi selengkapnya, lihat [Pemfilteran pesan Amazon SNS untuk topik FIFO](fifo-message-filtering.md).

------
#### [ Java ]

**SDK untuk Java 2.x**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di [Repositori Contoh Kode AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javav2/example_code/sns#code-examples). 
Contoh ini  
+ membuat topik Amazon SNS FIFO, dua antrian FIFO Amazon SQS, dan satu antrian Standar.
+ berlangganan antrian ke topik dan menerbitkan pesan ke topik tersebut.
[Tes](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javav2/example_code/sns/src/test/java/com/example/sns/PriceUpdateExampleTest.java) memverifikasi penerimaan pesan ke setiap antrian. [Contoh lengkap](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javav2/example_code/sns/src/main/java/com/example/sns/PriceUpdateExample.java) juga menunjukkan penambahan kebijakan akses dan menghapus sumber daya di akhir.  

```
public class PriceUpdateExample {
    public final static SnsClient snsClient = SnsClient.create();
    public final static SqsClient sqsClient = SqsClient.create();

    public static void main(String[] args) {

        final String usage = "\n" +
            "Usage: " +
            "    <topicName> <wholesaleQueueFifoName> <retailQueueFifoName> <analyticsQueueName>\n\n" +
            "Where:\n" +
            "   fifoTopicName - The name of the FIFO topic that you want to create. \n\n" +
            "   wholesaleQueueARN - The name of a SQS FIFO queue that will be created for the wholesale consumer. \n\n"
            +
            "   retailQueueARN - The name of a SQS FIFO queue that will created for the retail consumer. \n\n" +
            "   analyticsQueueARN - The name of a SQS standard queue that will be created for the analytics consumer. \n\n";
        if (args.length != 4) {
            System.out.println(usage);
            System.exit(1);
        }

        final String fifoTopicName = args[0];
        final String wholeSaleQueueName = args[1];
        final String retailQueueName = args[2];
        final String analyticsQueueName = args[3];

        // For convenience, the QueueData class holds metadata about a queue: ARN, URL,
        // name and type.
        List<QueueData> queues = List.of(
            new QueueData(wholeSaleQueueName, QueueType.FIFO),
            new QueueData(retailQueueName, QueueType.FIFO),
            new QueueData(analyticsQueueName, QueueType.Standard));

        // Create queues.
        createQueues(queues);

        // Create a topic.
        String topicARN = createFIFOTopic(fifoTopicName);

        // Subscribe each queue to the topic.
        subscribeQueues(queues, topicARN);

        // Allow the newly created topic to send messages to the queues.
        addAccessPolicyToQueuesFINAL(queues, topicARN);

        // Publish a sample price update message with payload.
        publishPriceUpdate(topicARN, "{\"product\": 214, \"price\": 79.99}", "Consumables");

        // Clean up resources.
        deleteSubscriptions(queues);
        deleteQueues(queues);
        deleteTopic(topicARN);
    }

    public static String createFIFOTopic(String topicName) {
        try {
            // Create a FIFO topic by using the SNS service client.
            Map<String, String> topicAttributes = Map.of(
                "FifoTopic", "true",
                "ContentBasedDeduplication", "false",
                "FifoThroughputScope", "MessageGroup");

            CreateTopicRequest topicRequest = CreateTopicRequest.builder()
                .name(topicName)
                .attributes(topicAttributes)
                .build();

            CreateTopicResponse response = snsClient.createTopic(topicRequest);
            String topicArn = response.topicArn();
            System.out.println("The topic ARN is" + topicArn);

            return topicArn;

        } catch (SnsException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
        return "";
    }

    public static void subscribeQueues(List<QueueData> queues, String topicARN) {
        queues.forEach(queue -> {
            SubscribeRequest subscribeRequest = SubscribeRequest.builder()
                .topicArn(topicARN)
                .endpoint(queue.queueARN)
                .protocol("sqs")
                .build();

            // Subscribe to the endpoint by using the SNS service client.
            // Only Amazon SQS queues can receive notifications from an Amazon SNS FIFO
            // topic.
            SubscribeResponse subscribeResponse = snsClient.subscribe(subscribeRequest);
            System.out.println("The queue [" + queue.queueARN + "] subscribed to the topic [" + topicARN + "]");
            queue.subscriptionARN = subscribeResponse.subscriptionArn();
        });
    }

    public static void publishPriceUpdate(String topicArn, String payload, String groupId) {

        try {
            // Create and publish a message that updates the wholesale price.
            String subject = "Price Update";
            String dedupId = UUID.randomUUID().toString();
            String attributeName = "business";
            String attributeValue = "wholesale";

            MessageAttributeValue msgAttValue = MessageAttributeValue.builder()
                .dataType("String")
                .stringValue(attributeValue)
                .build();

            Map<String, MessageAttributeValue> attributes = new HashMap<>();
            attributes.put(attributeName, msgAttValue);
            PublishRequest pubRequest = PublishRequest.builder()
                .topicArn(topicArn)
                .subject(subject)
                .message(payload)
                .messageGroupId(groupId)
                .messageDeduplicationId(dedupId)
                .messageAttributes(attributes)
                .build();

            final PublishResponse response = snsClient.publish(pubRequest);
            System.out.println(response.messageId());
            System.out.println(response.sequenceNumber());
            System.out.println("Message was published to " + topicArn);

        } catch (SnsException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
    }
```
+ Untuk detail API, lihat topik berikut di *Referensi API AWS SDK for Java 2.x *.
  + [CreateTopic](https://docs.aws.amazon.com/goto/SdkForJavaV2/sns-2010-03-31/CreateTopic)
  + [Publikasikan](https://docs.aws.amazon.com/goto/SdkForJavaV2/sns-2010-03-31/Publish)
  + [Berlangganan](https://docs.aws.amazon.com/goto/SdkForJavaV2/sns-2010-03-31/Subscribe)

------
#### [ Python ]

**SDK untuk Python (Boto3)**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di [Repositori Contoh Kode AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/python/example_code/sns#code-examples). 
Buat topik Amazon SNS FIFO, berlangganan Amazon SQS FIFO dan antrian standar ke topik tersebut, dan publikasikan pesan ke topik tersebut.  

```
def usage_demo():
    """Shows how to subscribe queues to a FIFO topic."""
    print("-" * 88)
    print("Welcome to the `Subscribe queues to a FIFO topic` demo!")
    print("-" * 88)

    sns = boto3.resource("sns")
    sqs = boto3.resource("sqs")
    fifo_topic_wrapper = FifoTopicWrapper(sns)
    sns_wrapper = SnsWrapper(sns)

    prefix = "sqs-subscribe-demo-"
    queues = set()
    subscriptions = set()

    wholesale_queue = sqs.create_queue(
        QueueName=prefix + "wholesale.fifo",
        Attributes={
            "MaximumMessageSize": str(4096),
            "ReceiveMessageWaitTimeSeconds": str(10),
            "VisibilityTimeout": str(300),
            "FifoQueue": str(True),
            "ContentBasedDeduplication": str(True),
        },
    )
    queues.add(wholesale_queue)
    print(f"Created FIFO queue with URL: {wholesale_queue.url}.")

    retail_queue = sqs.create_queue(
        QueueName=prefix + "retail.fifo",
        Attributes={
            "MaximumMessageSize": str(4096),
            "ReceiveMessageWaitTimeSeconds": str(10),
            "VisibilityTimeout": str(300),
            "FifoQueue": str(True),
            "ContentBasedDeduplication": str(True),
        },
    )
    queues.add(retail_queue)
    print(f"Created FIFO queue with URL: {retail_queue.url}.")

    analytics_queue = sqs.create_queue(QueueName=prefix + "analytics", Attributes={})
    queues.add(analytics_queue)
    print(f"Created standard queue with URL: {analytics_queue.url}.")

    topic = fifo_topic_wrapper.create_fifo_topic("price-updates-topic.fifo")
    print(f"Created FIFO topic: {topic.attributes['TopicArn']}.")

    for q in queues:
        fifo_topic_wrapper.add_access_policy(q, topic.attributes["TopicArn"])

    print(f"Added access policies for topic: {topic.attributes['TopicArn']}.")

    for q in queues:
        sub = fifo_topic_wrapper.subscribe_queue_to_topic(
            topic, q.attributes["QueueArn"]
        )
        subscriptions.add(sub)

    print(f"Subscribed queues to topic: {topic.attributes['TopicArn']}.")

    input("Press Enter to publish a message to the topic.")

    message_id = fifo_topic_wrapper.publish_price_update(
        topic, '{"product": 214, "price": 79.99}', "Consumables"
    )

    print(f"Published price update with message ID: {message_id}.")

    # Clean up the subscriptions, queues, and topic.
    input("Press Enter to clean up resources.")
    for s in subscriptions:
        sns_wrapper.delete_subscription(s)

    sns_wrapper.delete_topic(topic)

    for q in queues:
        fifo_topic_wrapper.delete_queue(q)

    print(f"Deleted subscriptions, queues, and topic.")

    print("Thanks for watching!")
    print("-" * 88)



class FifoTopicWrapper:
    """Encapsulates Amazon SNS FIFO topic and subscription functions."""

    def __init__(self, sns_resource):
        """
        :param sns_resource: A Boto3 Amazon SNS resource.
        """
        self.sns_resource = sns_resource

    def create_fifo_topic(self, topic_name):
        """
        Create a FIFO topic.
        Topic names must be made up of only uppercase and lowercase ASCII letters,
        numbers, underscores, and hyphens, and must be between 1 and 256 characters long.
        For a FIFO topic, the name must end with the .fifo suffix.

        :param topic_name: The name for the topic.
        :return: The new topic.
        """
        try:
            topic = self.sns_resource.create_topic(
                Name=topic_name,
                Attributes={
                    "FifoTopic": str(True),
                    "ContentBasedDeduplication": str(False),
                    "FifoThroughputScope": "MessageGroup",
                },
            )
            logger.info("Created FIFO topic with name=%s.", topic_name)
            return topic
        except ClientError as error:
            logger.exception("Couldn't create topic with name=%s!", topic_name)
            raise error


    @staticmethod
    def add_access_policy(queue, topic_arn):
        """
        Add the necessary access policy to a queue, so
        it can receive messages from a topic.

        :param queue: The queue resource.
        :param topic_arn: The ARN of the topic.
        :return: None.
        """
        try:
            queue.set_attributes(
                Attributes={
                    "Policy": json.dumps(
                        {
                            "Version":"2012-10-17",		 	 	 
                            "Statement": [
                                {
                                    "Sid": "test-sid",
                                    "Effect": "Allow",
                                    "Principal": {"AWS": "*"},
                                    "Action": "SQS:SendMessage",
                                    "Resource": queue.attributes["QueueArn"],
                                    "Condition": {
                                        "ArnLike": {"aws:SourceArn": topic_arn}
                                    },
                                }
                            ],
                        }
                    )
                }
            )
            logger.info("Added trust policy to the queue.")
        except ClientError as error:
            logger.exception("Couldn't add trust policy to the queue!")
            raise error


    @staticmethod
    def subscribe_queue_to_topic(topic, queue_arn):
        """
        Subscribe a queue to a topic.

        :param topic: The topic resource.
        :param queue_arn: The ARN of the queue.
        :return: The subscription resource.
        """
        try:
            subscription = topic.subscribe(
                Protocol="sqs",
                Endpoint=queue_arn,
            )
            logger.info("The queue is subscribed to the topic.")
            return subscription
        except ClientError as error:
            logger.exception("Couldn't subscribe queue to topic!")
            raise error


    @staticmethod
    def publish_price_update(topic, payload, group_id):
        """
        Compose and publish a message that updates the wholesale price.

        :param topic: The topic to publish to.
        :param payload: The message to publish.
        :param group_id: The group ID for the message.
        :return: The ID of the message.
        """
        try:
            att_dict = {"business": {"DataType": "String", "StringValue": "wholesale"}}
            dedup_id = uuid.uuid4()
            response = topic.publish(
                Subject="Price Update",
                Message=payload,
                MessageAttributes=att_dict,
                MessageGroupId=group_id,
                MessageDeduplicationId=str(dedup_id),
            )
            message_id = response["MessageId"]
            logger.info("Published message to topic %s.", topic.arn)
        except ClientError as error:
            logger.exception("Couldn't publish message to topic %s.", topic.arn)
            raise error
        return message_id


    @staticmethod
    def delete_queue(queue):
        """
        Removes an SQS queue. When run against an AWS account, it can take up to
        60 seconds before the queue is actually deleted.

        :param queue: The queue to delete.
        :return: None
        """
        try:
            queue.delete()
            logger.info("Deleted queue with URL=%s.", queue.url)
        except ClientError as error:
            logger.exception("Couldn't delete queue with URL=%s!", queue.url)
            raise error
```
+ Untuk detail API, lihat topik berikut di *Referensi API AWS SDK untuk Python (Boto3)*.
  + [CreateTopic](https://docs.aws.amazon.com/goto/boto3/sns-2010-03-31/CreateTopic)
  + [Publikasikan](https://docs.aws.amazon.com/goto/boto3/sns-2010-03-31/Publish)
  + [Berlangganan](https://docs.aws.amazon.com/goto/boto3/sns-2010-03-31/Subscribe)

------
#### [ SAP ABAP ]

**SDK for SAP ABAP**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di [Repositori Contoh Kode AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/sap-abap/services/sns#code-examples). 
Buat topik FIFO, berlangganan antrian Amazon SQS FIFO ke topik tersebut, dan publikasikan pesan ke topik Amazon SNS.  

```
    " Creates a FIFO topic. "
    DATA lt_tpc_attributes TYPE /aws1/cl_snstopicattrsmap_w=>tt_topicattributesmap.
    DATA ls_tpc_attributes TYPE /aws1/cl_snstopicattrsmap_w=>ts_topicattributesmap_maprow.
    ls_tpc_attributes-key = 'FifoTopic'.
    ls_tpc_attributes-value = NEW /aws1/cl_snstopicattrsmap_w( iv_value = 'true' ).
    INSERT ls_tpc_attributes INTO TABLE lt_tpc_attributes.

    TRY.
        DATA(lo_create_result) = lo_sns->createtopic(
               iv_name = iv_topic_name
               it_attributes = lt_tpc_attributes ).
        DATA(lv_topic_arn) = lo_create_result->get_topicarn( ).
        ov_topic_arn = lv_topic_arn.                                    " ov_topic_arn is returned for testing purposes. "
        MESSAGE 'FIFO topic created' TYPE 'I'.
      CATCH /aws1/cx_snstopiclimitexcdex.
        MESSAGE 'Unable to create more topics. You have reached the maximum number of topics allowed.' TYPE 'E'.
    ENDTRY.

    " Subscribes an endpoint to an Amazon Simple Notification Service (Amazon SNS) topic. "
    " Only Amazon Simple Queue Service (Amazon SQS) FIFO queues can be subscribed to an SNS FIFO topic. "
    TRY.
        DATA(lo_subscribe_result) = lo_sns->subscribe(
               iv_topicarn = lv_topic_arn
               iv_protocol = 'sqs'
               iv_endpoint = iv_queue_arn ).
        DATA(lv_subscription_arn) = lo_subscribe_result->get_subscriptionarn( ).
        ov_subscription_arn = lv_subscription_arn.                      " ov_subscription_arn is returned for testing purposes. "
        MESSAGE 'SQS queue was subscribed to SNS topic.' TYPE 'I'.
      CATCH /aws1/cx_snsnotfoundexception.
        MESSAGE 'Topic does not exist.' TYPE 'E'.
      CATCH /aws1/cx_snssubscriptionlmte00.
        MESSAGE 'Unable to create subscriptions. You have reached the maximum number of subscriptions allowed.' TYPE 'E'.
    ENDTRY.

    " Publish message to SNS topic. "
    TRY.
        DATA lt_msg_attributes TYPE /aws1/cl_snsmessageattrvalue=>tt_messageattributemap.
        DATA ls_msg_attributes TYPE /aws1/cl_snsmessageattrvalue=>ts_messageattributemap_maprow.
        ls_msg_attributes-key = 'Importance'.
        ls_msg_attributes-value = NEW /aws1/cl_snsmessageattrvalue( iv_datatype = 'String'
                                                                    iv_stringvalue = 'High' ).
        INSERT ls_msg_attributes INTO TABLE lt_msg_attributes.

        DATA(lo_result) = lo_sns->publish(
             iv_topicarn = lv_topic_arn
             iv_message = 'The price of your mobile plan has been increased from $19 to $23'
             iv_subject = 'Changes to mobile plan'
             iv_messagegroupid = 'Update-2'
             iv_messagededuplicationid = 'Update-2.1'
             it_messageattributes = lt_msg_attributes ).
        ov_message_id = lo_result->get_messageid( ).                    " ov_message_id is returned for testing purposes. "
        MESSAGE 'Message was published to SNS topic.' TYPE 'I'.
      CATCH /aws1/cx_snsnotfoundexception.
        MESSAGE 'Topic does not exist.' TYPE 'E'.
    ENDTRY.
```
+ Untuk mengetahui hal detail mengenai API, silakan lihat topik-topik berikut di *referensi API AWS SDK untuk ABAP SAP*.
  + [CreateTopic](https://docs.aws.amazon.com/sdk-for-sap-abap/v1/api/latest/index.html)
  + [Publikasikan](https://docs.aws.amazon.com/sdk-for-sap-abap/v1/api/latest/index.html)
  + [Berlangganan](https://docs.aws.amazon.com/sdk-for-sap-abap/v1/api/latest/index.html)

------

### Menerima pesan dari langganan FIFO
<a name="fifo-receiving-messages"></a>

Anda sekarang dapat menerima pembaruan harga di tiga aplikasi berlangganan. Seperti yang ditunjukkan pada[Kasus penggunaan contoh topik Amazon SNS FIFO](fifo-example-use-case.md), titik masuk untuk setiap aplikasi konsumen adalah antrian Amazon SQS, yang AWS Lambda fungsinya yang sesuai dapat polling secara otomatis. Ketika antrean Amazon SQS merupakan sumber peristiwa untuk fungsi Lambda, Lambda menskalakan armada poller sesuai kebutuhan untuk mengkonsumsi pesan secara efisien.

Untuk informasi selengkapnya, lihat [Menggunakan AWS Lambda Amazon SQS di Panduan AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/with-sqs.html) *Pengembang*. *Untuk informasi tentang menulis poller antrian Anda sendiri, lihat [Rekomendasi untuk standar Amazon SQS dan antrian FIFO](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-best-practices.html#sqs-standard-fifo-queue-best-practices) di *Panduan Pengembang Layanan Antrian Sederhana Amazon dan [ReceiveMessage](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ReceiveMessage.html)di Referensi API Layanan Antrian Sederhana Amazon*.*

## Menggunakan AWS CloudFormation
<a name="fifo-topic-cfn"></a>

CloudFormation memungkinkan Anda untuk menggunakan file template untuk membuat dan mengkonfigurasi kumpulan AWS sumber daya bersama-sama sebagai satu unit. Bagian ini memiliki contoh templat yang menciptakan berikut ini:
+ Topik Amazon SNS FIFO yang mendistribusikan pembaruan harga
+ Antrian Amazon SQS FIFO yang menyediakan pembaruan ini untuk aplikasi grosir dan eceran
+ Antrian standar Amazon SQS untuk aplikasi analitik yang menyimpan catatan, yang dapat ditanyakan untuk intelijen bisnis (BI)
+ Langganan Amazon SNS FIFO yang menghubungkan tiga antrian ke topik
+ Sebuah [kebijakan filter](sns-subscription-filter-policies.md) yang menentukan bahwa aplikasi pelanggan hanya menerima pembaruan harga yang mereka butuhkan

**catatan**  
Jika Anda menguji contoh kode ini dengan menerbitkan pesan ke topik, pastikan Anda mempublikasikan pesan dengan `business` atribut. Tentukan baik `retail` atau `wholesale` untuk nilai atribut. Jika tidak, pesan difilter dan tidak dikirim ke antrean berlangganan. 

```
{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Resources": {
    "PriceUpdatesTopic": {
      "Type": "AWS::SNS::Topic",
      "Properties": {
        "TopicName": "PriceUpdatesTopic.fifo",
        "FifoTopic": true,
        "ContentBasedDeduplication": false,
        "ArchivePolicy": {
        "MessageRetentionPeriod": "30"
        }
      }
    },
    "WholesaleQueue": {
      "Type": "AWS::SQS::Queue",
      "Properties": {
        "QueueName": "WholesaleQueue.fifo",
        "FifoQueue": true,
        "ContentBasedDeduplication": false
      }
    },
    "RetailQueue": {
      "Type": "AWS::SQS::Queue",
      "Properties": {
        "QueueName": "RetailQueue.fifo",
        "FifoQueue": true,
        "ContentBasedDeduplication": false
      }
    },
    "AnalyticsQueue": {
      "Type": "AWS::SQS::Queue",
      "Properties": {
        "QueueName": "AnalyticsQueue"
      }
    },
    "WholesaleSubscription": {
      "Type": "AWS::SNS::Subscription",
      "Properties": {
        "TopicArn": {
          "Ref": "PriceUpdatesTopic"
        },
        "Endpoint": {
          "Fn::GetAtt": [
            "WholesaleQueue",
            "Arn"
          ]
        },
        "Protocol": "sqs",
        "RawMessageDelivery": "false",
        "FilterPolicyScope": "MessageBody",
        "FilterPolicy": {
          "business": [
            "wholesale"
          ]
        }
      }
    },
    "RetailSubscription": {
      "Type": "AWS::SNS::Subscription",
      "Properties": {
        "TopicArn": {
          "Ref": "PriceUpdatesTopic"
        },
        "Endpoint": {
          "Fn::GetAtt": [
            "RetailQueue",
            "Arn"
          ]
        },
        "Protocol": "sqs",
        "RawMessageDelivery": "false",
        "FilterPolicyScope": "MessageBody",
        "FilterPolicy": {
          "business": [
            "retail"
          ]
        }
      }
    },
    "AnalyticsSubscription": {
      "Type": "AWS::SNS::Subscription",
      "Properties": {
        "TopicArn": {
          "Ref": "PriceUpdatesTopic"
        },
        "Endpoint": {
          "Fn::GetAtt": [
            "AnalyticsQueue",
            "Arn"
          ]
        },
        "Protocol": "sqs",
        "RawMessageDelivery": "false"
      }
    },
    "SalesQueuesPolicy": {
      "Type": "AWS::SQS::QueuePolicy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Effect": "Allow",
              "Principal": {
                "Service": "sns.amazonaws.com"
              },
              "Action": [
                "sqs:SendMessage"
              ],
              "Resource": "*",
              "Condition": {
                "ArnEquals": {
                  "aws:SourceArn": {
                    "Ref": "PriceUpdatesTopic"
                  }
                }
              }
            }
          ]
        },
        "Queues": [
          {
            "Ref": "WholesaleQueue"
          },
          {
            "Ref": "RetailQueue"
          },
          {
            "Ref": "AnalyticsQueue"
          }
        ]
      }
    }
  }
}
```

Untuk informasi selengkapnya tentang penerapan AWS sumber daya menggunakan CloudFormation templat, lihat [Memulai](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/GettingStarted.Walkthrough.html) di *Panduan CloudFormation Pengguna*.