全部产品
Search
文档中心

Simple Message Queue (formerly MNS):Pesan terurut

更新时间:Dec 18, 2025

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 MessageGroupId yang 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 MessageGroupId tertentu ditarik, pesan tersebut masuk ke status tidak terlihat dan memblokir pesan berikutnya yang memiliki MessageGroupId yang 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 MessageGroupId yang 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 MessageGroupId sebagai 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:

    1. Masuk ke Konsol Simple Message Queue (formerly MNS).

    2. Di panel navigasi kiri, pilih Queue Model > Queues.

    3. Di bilah navigasi atas, pilih Wilayah.

    4. Pada halaman Queues, klik Create Queue.

    5. Pada panel Create Queue, atur Queue Type menjadi FIFO Queue, konfigurasikan parameter lainnya, lalu klik OK.

      image

  • Kirim pesan:

    • Gunakan SendMessage dan sertakan MessageGroupId. Gunakan kunci primary bisnis, seperti ID pesanan, sebagai group ID.

    • Jika Anda tidak menyertakan MessageGroupId, kode kesalahan FifoMissingMessageGroupId akan dikembalikan.

  • Terima dan konfirmasi pesan:

    • Tarik pesan menggunakan ReceiveMessage. Badan respons berisi MessageGroupId. Setelah memproses pesan, panggil DeleteMessage untuk mengonfirmasi.

Topik terurut (FIFO topics)

  • Buat topik:

    1. Masuk ke Konsol Simple Message Queue (formerly MNS).

    2. Di panel navigasi kiri, pilih Topic Model > Topics.

    3. Di bilah navigasi atas, pilih Wilayah.

    4. Pada halaman Topics, klik Create Topic.

    5. Pada panel Create Topic, atur Topic Type menjadi FIFO Topic, konfigurasikan parameter lainnya, lalu klik OK.

      image

  • 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 PublishMessage dan sertakan MessageGroupId.

    • Jika Anda tidak menyertakan MessageGroupId, kode kesalahan FifoMissingMessageGroupId akan dikembalikan.

  • Konsumsi dan konfirmasi pesan:

    • Pada antrian terurut yang telah dilanggan, tarik pesan menggunakan ReceiveMessage dan konfirmasi menggunakan DeleteMessage. Hal ini menjaga urutan pemrosesan dalam kelompok.

Instruksi API

API terkait antrian

Nama API

Deskripsi parameter

Deskripsi respons

CreateQueue-Create Queue

Parameter permintaan QueueType:

  • normal (standard queue)

  • fifo (ordered queue)

Membuat antrian dengan tipe yang ditentukan.

GetQueueAttributes-Get Queue Attributes

Tidak ada parameter khusus

Mengembalikan informasi antrian, termasuk bidang QueueType.

ListQueue-Lists all queues for a specified Alibaba Cloud account

Tidak ada parameter khusus

Mengembalikan daftar antrian. Setiap antrian mencakup bidang QueueType.

API terkait topik

Nama API

Deskripsi parameter

Deskripsi respons

CreateTopic-Create topic

Parameter permintaan TopicType:

  • normal (standard topic)

  • fifo (ordered topic)

Membuat topik dengan tipe yang ditentukan.

GetTopicAttributes-Get topic attributes

Tidak ada parameter khusus

Mengembalikan informasi topik, termasuk bidang TopicType.

ListTopic-Lists topics in an Alibaba Cloud account

Tidak ada parameter khusus

Mengembalikan daftar topik. Setiap topik mencakup bidang TopicType.

API pengiriman dan penerimaan pesan

Nama API

Persyaratan parameter

Deskripsi respons

Catatan

SendMessage

Untuk antrian terurut, Anda harus menyertakan MessageGroupId.

Respons standar.

Mengirim satu pesan ke antrian.

BatchSendMessage

Untuk antrian terurut, Anda harus menyertakan MessageGroupId.

Respons standar.

Mengirim pesan ke antrian secara batch.

PublishMessage

Untuk topik terurut, Anda harus menyertakan MessageGroupId.

Respons standar.

Memublikasikan pesan ke topik.

ReceiveMessage

Tidak ada parameter khusus.

Badan respons mencakup MessageGroupId.

Menerima satu pesan dari antrian.

BatchReceiveMessage

Mendukung parameter numOfMessages.

Badan respons mencakup MessageGroupId.

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 MessageGroupId yang 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 numOfMessages untuk 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.