Pesan terurut dikonsumsi dalam urutan yang sama dengan saat dikirim. Pesan pertama yang dikirim akan dikonsumsi terlebih dahulu, diikuti oleh pesan berikutnya. Pesan terurut sering digunakan dalam skenario yang memerlukan konsumsi pesan sesuai dengan urutan produksi, seperti di bidang sekuritas keuangan dan e-commerce. Topik ini menjelaskan istilah, skenario, mekanisme kerja, dan catatan penggunaan pesan terurut dalam ApsaraMQ for RocketMQ.
Apa itu pesan terurut?
Pesan terurut adalah jenis pesan yang disediakan oleh ApsaraMQ for RocketMQ. Pesan ini diterbitkan dan dikonsumsi dalam urutan first in, first out (FIFO) di dalam sebuah topik. Pesan yang diterbitkan paling awal akan menjadi pesan pertama yang dikonsumsi.
Pesan terurut berpartisi
Pesan dalam topik tertentu dipartisi berdasarkan kunci sharding. Pesan dalam setiap partisi diterbitkan dan dikonsumsi dalam urutan FIFO. Urutan FIFO hanya berlaku untuk pesan dalam partisi yang sama; pesan lintas partisi tidak perlu dikonsumsi dalam urutan FIFO.
Skema
Pesan terurut berpartisi cocok untuk skenario di mana performa tinggi diperlukan dan pesan dalam setiap partisi (dibedakan menggunakan kunci sharding) harus diterbitkan dan dikonsumsi dalam urutan FIFO.
Contoh
Jika kode verifikasi diperlukan untuk pendaftaran pengguna dan ID pengguna digunakan sebagai kunci sharding, pesan yang dikirim oleh pengguna yang sama akan diterbitkan dan dikonsumsi dalam urutan FIFO.
Jika Anda menggunakan ID pesanan sebagai kunci sharding saat membuat pesanan e-commerce, pesan untuk pembuatan, pembayaran, dan pengembalian dana dari pesanan yang sama akan diterbitkan dan dikonsumsi dalam urutan FIFO.
Semua sistem e-commerce internal di Alibaba Group menggunakan pesan terurut berpartisi untuk memastikan performa yang stabil dan pemrosesan berurutan dari pesanan online.
Mekanisme kerja
Bagian ini menjelaskan cara memastikan urutan pesan dalam ApsaraMQ for RocketMQ.
Untuk memastikan bahwa pesan dikirim dan dikonsumsi dalam urutan FIFO dalam ApsaraMQ for RocketMQ, perhatikan fase-fase berikut:
Penerbitan pesan
Dalam gambar sebelumnya, pesan untuk Pesanan A dan B diproduksi dalam urutan berikut: A1, B1, A2, A3, B2, dan B3. Pesan untuk pesanan yang sama harus dikirim dan dikonsumsi dalam urutan yang sama dengan saat diproduksi. Sebagai contoh, pesan untuk Pesanan A dikirim dan dikonsumsi dalam urutan berikut: A1, A2, dan A3. Pesan normal untuk Pesanan A mungkin dikirim ke antrian berbeda dalam mode polling, sehingga urutan aslinya tidak dapat dipertahankan di dalam antrian. Pesan terurut yang menggunakan kunci sharding yang sama, seperti ID pesanan yang sama, dirutekan secara berurutan ke antrian yang sama dalam ApsaraMQ for RocketMQ.
Broker ApsaraMQ for RocketMQ menentukan urutan pesan berdasarkan urutan pengiriman produser. Broker ApsaraMQ for RocketMQ tidak dapat menentukan urutan pesan yang dikirim secara paralel oleh produser atau thread berbeda.
Penyimpanan pesan
Setiap antrian logis dalam topik pesan terurut berkorespondensi dengan antrian fisik, seperti ditunjukkan dalam gambar sebelumnya. Saat pesan dikirim ke antrian logis secara berurutan, mereka disimpan dalam antrian fisik yang sesuai dalam urutan yang sama.
Konsumsi pesan
ApsaraMQ for RocketMQ mengantarkan pesan kepada konsumen dalam urutan penyimpanannya. Kemudian, konsumen mengonsumsi pesan mulai dari yang diterima paling awal.
Saat konsumen mengonsumsi pesan, pesan yang mengandung kunci sharding yang sama dikonsumsi menggunakan satu thread. Hal ini membantu memastikan konsistensi antara urutan konsumsi pesan dan urutan penyimpanan pesan, serta konsistensi antara urutan konsumsi pesan dan urutan penerbitan pesan.
Catatan penggunaan
Setiap grup berkorespondensi dengan satu jenis topik. Grup tidak dapat digunakan untuk mengirim atau menerima baik pesan terurut maupun pesan tidak terurut.
Broker ApsaraMQ for RocketMQ menentukan urutan pesan berdasarkan urutan pengiriman oleh pengirim menggunakan satu produser atau thread. Jika pengirim menggunakan beberapa produser atau thread untuk mengirim pesan secara bersamaan, urutan pesan ditentukan oleh urutan penerimaan pesan oleh broker ApsaraMQ for RocketMQ. Urutan ini mungkin berbeda dari urutan pengiriman di sisi bisnis.
FAQ
Bisakah satu pesan menjadi pesan terurut, pesan terjadwal, dan pesan transaksional pada saat yang sama?
Tidak. Pesan terurut, pesan terjadwal, dan pesan transaksional adalah jenis pesan yang berbeda dan saling eksklusif.
Di wilayah mana saya bisa menggunakan pesan terurut?
Pesan terurut didukung di semua wilayah Alibaba Cloud dan wilayah Finance Cloud tempat ApsaraMQ for RocketMQ tersedia.
Mode transmisi apa yang didukung oleh pesan terurut?
Pesan terurut hanya mendukung mode transmisi sinkron yang andal, yang memastikan urutan pesan yang ketat. Transmisi asinkron tidak didukung.
Apakah pesan terurut mendukung konsumsi klustering dan konsumsi siaran?
Pesan terurut mendukung konsumsi klustering tetapi tidak mendukung konsumsi siaran.
Contoh kode untuk TCP SDK
Untuk informasi tentang contoh kode untuk perpesanan melalui TCP, lihat dokumen berikut:
Contoh kode untuk HTTP SDK
Untuk informasi tentang contoh kode untuk perpesanan melalui HTTP, lihat dokumen berikut: