Simple Message Queue (formerly MNS) mendukung pesan terurut. Topik ini menjelaskan konsep inti, perbedaan dari pesan normal, metode pembuatan dan penggunaan, instruksi API, serta batasan dan praktik terbaik terkait.
Definisi fitur
Simple Message Queue (formerly MNS) menyediakan pemrosesan first-in-first-out (FIFO) untuk pesan dalam kelompok yang sama, memastikan penanganan berurutan dalam skenario bisnis.
Skenario
Pesan terurut ideal untuk skenario bisnis yang memerlukan pengurutan pesan secara ketat:
-
Transisi status pesanan
Dalam sistem pesanan E-dagang, status seperti pembuatan pesanan → pembayaran → pengiriman → konfirmasi penerimaan harus diproses secara kronologis agar status bisnis tetap akurat.
-
Pemrosesan transaksi keuangan
Dalam sistem perdagangan sekuritas atau saham, pesanan dengan harga penawaran yang sama harus diproses secara ketat sesuai urutan pemasukannya. Sistem downstream harus menangani pesanan tersebut sesuai urutan pengirimannya.
-
Sinkronisasi database
Database upstream melakukan operasi insert, delete, atau update. Log operasi biner dikirimkan sebagai pesan ke sistem downstream, yang kemudian memainkannya ulang untuk memperbarui data secara berurutan dan menghindari inkonsistensi data.
-
Pencatatan log bisnis
Log dari operasi bisnis kritis harus disimpan secara ketat dalam urutan kronologis untuk mendukung audit dan troubleshooting.
Konsep utama
-
MessageGroupId: Pengidentifikasi kelompok pesan. Sistem menjamin urutan pesan dalam setiap kelompok: pesan dengan
MessageGroupIdyang sama diproses secara ketat berurutan, sedangkan pesan dari kelompok berbeda dapat diproses secara paralel. -
Visibility timeout: Setelah pesan berhasil ditarik, pesan tersebut tidak terlihat oleh konsumen lain hingga waktu timeout habis. Ini mencegah beberapa konsumen memproses pesan yang sama secara bersamaan. Jika pesan tidak dikonfirmasi sebagai dihapus sebelum timeout, pesan tersebut akan kembali terlihat.
-
Mekanisme penguncian kelompok: Dalam antrian terurut, begitu pesan dengan
MessageGroupIdtertentu ditarik tetapi belum dikonfirmasi sebagai dihapus (yaitu masih tidak terlihat), semua pesan berikutnya dalamMessageGroupIdyang sama akan diblokir. Hal ini memastikan urutan konsumsi yang ketat. Hanya setelah pesan saat ini dikonfirmasi sebagai dihapus atau visibility timeout-nya habis, pesan berikutnya dalam kelompok yang sama dapat ditarik.
Perbedaan dari pesan normal
-
Semantik pengurutan:
-
Pesan normal (antrian/topik standar): Mengirimkan setidaknya satu kali secara best effort, tanpa jaminan urutan.
-
Pesan terurut (antrian/topik FIFO): Dalam
MessageGroupIdyang sama, pesan dikonsumsi secara ketat sesuai urutan kedatangannya di server. Pesan yang lebih awal harus sepenuhnya diproses sebelum pesan berikutnya dapat dikonsumsi.
-
-
Model konkurensi:
-
Pesan normal: Tidak ada batasan pengelompokan; dioptimalkan untuk throughput keseluruhan.
-
Pesan terurut: Menggunakan
MessageGroupIdsebagai unit konkurensi—serial dalam satu kelompok, paralel antar kelompok.
-
-
Persyaratan pesan:
-
Mengirim pesan terurut memerlukan penentuan
MessageGroupId(berlaku untuk antrian maupun topik).
-
Memulai
Antrian FIFO
-
Buat antrian:
Di panel navigasi kiri, pilih .
Di bilah navigasi atas, pilih Wilayah.
Di halaman Queues, klik Create Queue.
-
Di panel Create Queue, atur Queue Type menjadi FIFO Queue, konfigurasi parameter lainnya, lalu klik OK.
Parameter lain yang dapat dikonfigurasi meliputi Maximum message size, Long polling period, Message visibility timeout, Message retention period, Message delay time, Enable logging, Dead-letter policy, dan Rate limiting policy.
-
Kirim pesan:
-
Gunakan
SendMessagedan sertakanMessageGroupId. Gunakan kunci bisnis yang stabil seperti ID pesanan. -
Jika Anda menghilangkan
MessageGroupId, sistem akan mengembalikan kode kesalahanFifoMissingMessageGroupId.
-
-
Terima dan konfirmasi:
-
Gunakan
ReceiveMessageuntuk menarik pesan. Respons mencakupMessageGroupId. Setelah diproses, panggilDeleteMessageuntuk mengonfirmasi.
-
Topik FIFO
-
Buat topik:
Di panel navigasi kiri, pilih .
Di bilah navigasi atas, pilih Wilayah.
-
Di halaman Topics, klik Create Topic.
-
Di panel Create Topic, atur Topic Type menjadi FIFO Topic, konfigurasi parameter lainnya, lalu klik OK.
-
Buat langganan:
Berlangganan ke antrian FIFO untuk memastikan pengurutan pesan. Topik normal hanya dapat berlangganan ke antrian standar. Untuk detailnya, lihat Langkah 3: Buat langganan.
-
Publikasikan pesan:
-
Gunakan
PublishMessagedan sertakanMessageGroupId. -
Jika Anda menghilangkan
MessageGroupId, sistem akan mengembalikan kode kesalahanFifoMissingMessageGroupId.
-
-
Konsumsi dan konfirmasi:
-
Di sisi antrian FIFO yang dilanggankan, gunakan
ReceiveMessageuntuk menarik pesan danDeleteMessageuntuk mengonfirmasi, mempertahankan pemrosesan berurutan dalam setiap kelompok.
-
Penggunaan API
API terkait antrian
|
Nama API |
Deskripsi parameter |
Deskripsi respons |
|
CreateQueue-Buat antrian |
Parameter input
|
Membuat antrian dengan tipe yang ditentukan. |
|
GetQueueAttributes-Dapatkan atribut antrian |
Tidak ada parameter khusus |
Mengembalikan informasi antrian, termasuk bidang |
|
Tidak ada parameter khusus |
Mengembalikan daftar antrian. Setiap antrian mencakup bidang |
API terkait topik
|
Nama API |
Deskripsi parameter |
Deskripsi respons |
|
CreateTopic-Buat topik |
Parameter input
|
Membuat topik dengan tipe yang ditentukan. |
|
GetTopicAttributes-Dapatkan atribut topik |
Tidak ada parameter khusus |
Mengembalikan informasi topik, termasuk bidang |
|
ListTopic-Daftar topik di bawah Akun Alibaba Cloud |
Tidak ada parameter khusus |
Mengembalikan daftar topik. Setiap topik mencakup bidang |
API kirim/terima pesan
|
Nama API |
Persyaratan parameter |
Deskripsi Pengembalian |
Catatan |
|
Antrian FIFO memerlukan |
Respons standar. |
Mengirim satu pesan ke antrian. |
|
|
Antrian FIFO memerlukan |
Respons standar. |
Mengirim beberapa pesan ke antrian dalam satu batch. |
|
|
Topik FIFO memerlukan |
Respons standar. |
Memublikasikan pesan ke topik. |
|
|
Tidak ada parameter khusus. |
Badan respons mencakup |
Menerima satu pesan dari antrian. |
|
|
Mendukung parameter |
Badan respons mencakup |
Dapat mengembalikan pesan dari beberapa kelompok. Urutan dipertahankan dalam setiap kelompok. |
Batasan
-
Wilayah yang didukung meliputi Tiongkok (Shenzhen), Tiongkok (Shanghai), dan Tiongkok (Hangzhou). Untuk meminta dukungan FIFO di wilayah lain, submit a ticket.
-
Group ID wajib: Mengirim pesan ke antrian atau topik FIFO memerlukan
MessageGroupId. -
Kompatibilitas tipe:
-
Antrian surat mati (DLQ): Hanya antrian dengan tipe yang sama yang dapat di-bind. Pesan FIFO hanya dapat di-bind ke antrian surat mati FIFO, dan pesan normal hanya dapat di-bind ke antrian surat mati standar.
-
Langganan: Topik standar hanya dapat berlangganan ke antrian standar. Untuk pengiriman terurut, langgankan topik FIFO ke antrian FIFO.
-
-
Peek tidak didukung: Antrian FIFO tidak mendukung antarmuka peeking pesan (PeekMessage).
Praktik terbaik
-
Desain kelompok:
-
Gunakan nilai
MessageGroupIdyang stabil dan terdistribusi merata (seperti ID pesanan) untuk mencegah beberapa kelompok hot-spot menjadi bottleneck performa. -
Untuk beban kerja hot-spot ekstrem, bagi kelompok lebih lanjut di lapisan aplikasi untuk meningkatkan konkurensi.
-
-
Visibility timeout: Atur berdasarkan durasi pemrosesan aktual untuk memastikan aplikasi Anda menyelesaikan pemrosesan dan mengonfirmasi pesan sebelum timeout, sehingga mengurangi pengiriman duplikat.
-
Idempotensi dan retry: Terapkan pemrosesan idempoten dan logika retry pada konsumen untuk memastikan konsistensi end-to-end.
-
Penerimaan batch: Tingkatkan
numOfMessagesuntuk meningkatkan throughput, selama penundaan pemrosesan per pesan tetap dapat diterima.
FAQ
Bagaimana pengurutan didefinisikan?
Pesan dengan MessageGroupId yang sama dikirimkan dan diproses secara ketat sesuai urutan pengiriman. Pesan dari kelompok berbeda dapat diproses secara paralel.
Apakah saya harus menyediakan MessageGroupId?
Ya. Mengirim pesan ke antrian atau topik FIFO memerlukan MessageGroupId. Tanpa itu, pengurutan tidak dapat dijamin.
Bagaimana cara memilih antara antrian/topik FIFO dan standar?
Gunakan antrian atau topik FIFO jika bisnis Anda memerlukan pengurutan ketat (seperti transisi status pesanan). Gunakan antrian atau topik standar jika Anda memprioritaskan throughput dan elastisitas keseluruhan serta tidak memerlukan pengurutan pesan. Untuk memulai, buat FIFO Queue atau FIFO Topic di Konsol, sertakan MessageGroupId saat mengirim, dan baca atribut ini di sisi konsumen untuk pemrosesan dan konfirmasi terurut.