Simple Message Queue (formerly MNS) mendukung pesan terurut. Topik ini menjelaskan konsep inti pesan terurut, perbedaannya dengan pesan normal, cara membuat dan menggunakannya, instruksi API, batasan, serta praktik terbaik.
Definisi fitur
Pesan terurut dalam Simple Message Queue (formerly MNS) menyediakan pengiriman first-in, first-out (FIFO) untuk pesan dalam kelompok yang sama, sehingga memastikan pesan diproses sesuai urutan yang dibutuhkan oleh skenario bisnis Anda.
Skenario
Pesan terurut ideal untuk skenario bisnis yang memerlukan pengurutan pesan secara ketat:
Transisi status pesanan
Dalam sistem pesanan e-commerce, status seperti pembuatan pesanan, pembayaran, pengiriman, dan konfirmasi penerimaan harus diproses secara kronologis agar status bisnis tetap akurat.
Pemrosesan transaksi keuangan
Dalam sistem perdagangan sekuritas dan saham, jika pesanan perdagangan memiliki harga penawaran yang sama, pesanan tersebut harus diproses berdasarkan prinsip penawaran pertama, perdagangan pertama. Sistem downstream harus memproses pesanan-pesanan ini sesuai urutan pemasukannya.
Sinkronisasi database
Database upstream melakukan operasi create, update, dan delete. Operasi tersebut dikirim sebagai log operasi biner dalam bentuk pesan ke sistem downstream. Sistem downstream menerapkan operasi ini dari pesan untuk memperbarui statusnya dan mencegah inkonsistensi data.
Pencatatan log bisnis
Log untuk operasi bisnis kritis harus disimpan dalam urutan kronologis yang ketat guna memudahkan audit dan troubleshooting di masa depan.
Konsep utama
MessageGroupId: Pengidentifikasi untuk kelompok pesan. Sistem menggunakan ID kelompok ini untuk menjamin urutan pesan. Dalam
MessageGroupIdyang sama, pesan diproses secara berurutan ketat. Pesan dari kelompok berbeda dapat diproses secara paralel.Visibility Timeout: Setelah pesan berhasil ditarik, pesan tersebut menjadi tidak terlihat oleh konsumen lain hingga periode timeout berakhir. Ini mencegah pesan diproses oleh beberapa konsumen secara bersamaan. Jika pesan tidak dikonfirmasi untuk dihapus, pesan akan kembali terlihat setelah timeout berakhir.
Mekanisme penguncian kelompok: Dalam antrian terurut, setelah pesan dengan
MessageGroupIdtertentu ditarik, pesan tersebut masuk ke status tidak terlihat dan memblokir pesan berikutnya yang memilikiMessageGroupIdyang sama. Hal ini memastikan urutan konsumsi yang ketat. Pesan berikutnya dalam kelompok yang sama hanya dapat ditarik setelah pesan saat ini dihapus atau timeout visibilitasnya berakhir.
Perbedaan dari pesan normal
Semantik pengurutan:
Pesan normal (antrian/topik standar): Menyediakan pengiriman at-least-once. Urutan tidak dijamin secara default.
Pesan terurut (antrian/topik terurut): Dalam
MessageGroupIdyang sama, pesan harus dikonsumsi dalam urutan ketat sesuai kedatangannya di server. Pesan hanya dapat dikonsumsi setelah pesan sebelumnya selesai diproses.
Model konkurensi:
Pesan normal: Tidak ada batasan kelompok. Menekankan throughput keseluruhan.
Pesan terurut: Menggunakan
MessageGroupIdsebagai unit konkurensi. Pesan diproses secara serial dalam satu kelompok dan secara paralel antar kelompok.
Persyaratan pesan:
Saat mengirim pesan terurut, Anda harus menentukan
MessageGroupId. Aturan ini berlaku baik untuk antrian maupun topik.
Memulai
Antrian terurut (FIFO queues)
Buat antrian:
Di panel navigasi kiri, pilih .
Di bilah navigasi atas, pilih Wilayah.
Pada halaman Queues, klik Create Queue.
Pada panel Create Queue, atur Queue Type menjadi FIFO Queue, konfigurasikan parameter lainnya, lalu klik OK.

Kirim pesan:
Gunakan
SendMessagedan sertakanMessageGroupId. Gunakan kunci primary bisnis, seperti ID pesanan, sebagai group ID.Jika Anda tidak menyertakan
MessageGroupId, kode kesalahanFifoMissingMessageGroupIdakan dikembalikan.
Terima dan konfirmasi pesan:
Tarik pesan menggunakan
ReceiveMessage. Badan respons berisiMessageGroupId. Setelah memproses pesan, panggilDeleteMessageuntuk mengonfirmasi.
Topik terurut (FIFO topics)
Buat topik:
Di panel navigasi kiri, pilih .
Di bilah navigasi atas, pilih Wilayah.
Pada halaman Topics, klik Create Topic.
Pada panel Create Topic, atur Topic Type menjadi FIFO Topic, konfigurasikan parameter lainnya, lalu klik OK.

Buat langganan:
Buat subscription yang mendorong pesan ke antrian terurut untuk memastikan urutan pesan tetap terjaga. Langganan untuk topik standar hanya dapat mendorong pesan ke antrian standar. Untuk informasi selengkapnya, lihat Langkah 3: Buat langganan.
Publikasikan pesan:
Gunakan
PublishMessagedan sertakanMessageGroupId.Jika Anda tidak menyertakan
MessageGroupId, kode kesalahanFifoMissingMessageGroupIdakan dikembalikan.
Konsumsi dan konfirmasi pesan:
Pada antrian terurut yang telah dilanggan, tarik pesan menggunakan
ReceiveMessagedan konfirmasi menggunakanDeleteMessage. Hal ini menjaga urutan pemrosesan dalam kelompok.
Instruksi API
API terkait antrian
Nama API | Deskripsi parameter | Deskripsi respons |
CreateQueue-Create Queue | Parameter permintaan
| Membuat antrian dengan tipe yang ditentukan. |
GetQueueAttributes-Get Queue Attributes | Tidak ada parameter khusus | Mengembalikan informasi antrian, termasuk bidang |
ListQueue-Lists all queues for a specified Alibaba Cloud account | Tidak ada parameter khusus | Mengembalikan daftar antrian. Setiap antrian mencakup bidang |
API terkait topik
Nama API | Deskripsi parameter | Deskripsi respons |
CreateTopic-Create topic | Parameter permintaan
| Membuat topik dengan tipe yang ditentukan. |
GetTopicAttributes-Get topic attributes | Tidak ada parameter khusus | Mengembalikan informasi topik, termasuk bidang |
ListTopic-Lists topics in an Alibaba Cloud account | Tidak ada parameter khusus | Mengembalikan daftar topik. Setiap topik mencakup bidang |
API pengiriman dan penerimaan pesan
Nama API | Persyaratan parameter | Deskripsi respons | Catatan |
Untuk antrian terurut, Anda harus menyertakan | Respons standar. | Mengirim satu pesan ke antrian. | |
Untuk antrian terurut, Anda harus menyertakan | Respons standar. | Mengirim pesan ke antrian secara batch. | |
Untuk topik terurut, Anda harus menyertakan | Respons standar. | Memublikasikan pesan ke topik. | |
Tidak ada parameter khusus. | Badan respons mencakup | Menerima satu pesan dari antrian. | |
Mendukung parameter | Badan respons mencakup | Dapat berisi pesan dari beberapa kelompok. Urutan dalam setiap kelompok tetap dipertahankan. |
Batasan
Fitur ini saat ini tersedia di wilayah China (Shenzhen), China (Shanghai), dan China (Hangzhou). Untuk menggunakan pesan terurut di wilayah lain, submit a ticket.
Group ID wajib: Saat mengirim pesan ke antrian atau topik terurut, Anda harus menyertakan
MessageGroupId.Pencocokan tipe:
Antrian surat mati (DLQ): DLQ harus memiliki tipe yang sama dengan antrian sumbernya. Misalnya, antrian terurut hanya dapat disambungkan ke DLQ terurut, dan antrian standar hanya dapat disambungkan ke DLQ standar.
Langganan: Langganan untuk topik standar hanya dapat mendorong pesan ke antrian standar. Untuk memastikan urutan pesan, langganan untuk topik terurut harus mendorong pesan ke antrian terurut.
Peek tidak didukung: Antrian terurut tidak mendukung API PeekMessage.
Praktik terbaik
Desain kelompok:
Gunakan
MessageGroupIdyang stabil dan terdistribusi merata, seperti ID pesanan, untuk menghindari bottleneck performa akibat beberapa kelompok hot spot.Untuk bisnis dengan hot spot ekstrem, pertimbangkan untuk membagi kelompok lebih lanjut di lapisan bisnis guna meningkatkan tingkat konkurensi.
Visibility timeout: Atur timeout berdasarkan waktu pemrosesan aktual. Hal ini memastikan operasi bisnis selesai dan dikonfirmasi sebelum timeout berakhir, sehingga mengurangi kemungkinan pengiriman ulang.
Idempotensi dan retry: Terapkan pemrosesan idempoten dan mekanisme retry pada konsumen untuk memastikan konsistensi end-to-end.
Penarikan batch: Tingkatkan nilai
numOfMessagesuntuk meningkatkan throughput, sekaligus memastikan penundaan pemrosesan untuk satu pesan tetap dapat diterima.
FAQ
Bagaimana urutan didefinisikan?
Pesan dalam MessageGroupId yang sama diproses dalam urutan first-in, first-out (FIFO) ketat sesuai kedatangannya di server. Pesan dari kelompok berbeda dapat diproses secara paralel.
Apakah MessageGroupId wajib?
Ya. Anda harus menyertakan MessageGroupId saat mengirim pesan ke antrian atau topik terurut. Jika tidak, urutan pemrosesan tidak dapat dijamin.
Bagaimana memilih antara antrian/topik terurut dan standar?
Jika bisnis Anda bergantung pada pengurutan ketat, seperti transisi status pesanan, pilih antrian atau topik terurut. Jika Anda lebih memprioritaskan throughput keseluruhan dan elastisitas tanpa memerlukan pengurutan ketat, gunakan antrian atau topik standar. Untuk memulai, buat Ordered Queue atau Ordered Topic di Konsol, sertakan MessageGroupId saat mengirim pesan, lalu gunakan properti ini di sisi konsumen untuk memproses dan mengonfirmasi pesan.