Dalam menggunakan RabbitMQ, ada beberapa skenario bisnis yang memerlukan penjaminan konsumsi berurutan. Misalnya, dalam skenario bisnis di mana tiga pesan dihasilkan untuk melakukan operasi penambahan, modifikasi, dan penghapusan data, jika urutan konsumsi tidak dijamin, urutan eksekusi dapat menjadi penghapusan, modifikasi, penambahan, sehingga menyebabkan keteraturan.
Seperti yang ditunjukkan di bawah ini:
Isu penentuan urutan pesan dalam RabbitMQ perlu dipertimbangkan dari tiga aspek: urutan pengiriman pesan, urutan pesan dalam antrian, dan urutan konsumsi pesan.
Urutan pengiriman pesan
Urutan pengiriman pesan di ujung pengirim pesan umumnya tidak ketat diperlukan untuk kebanyakan bisnis. Tidak masalah siapa yang mengirim pesan pertama. Jika sebuah bisnis memerlukan pesan untuk dikirim secara berurutan, itu berarti hanya satu pesan dapat dikirim pada satu waktu dengan penguncian global, dan pesan tidak dapat dikirim secara bersamaan.
Urutan pesan dalam antrian
Di RabbitMQ, pesan-pesan pada akhirnya akan disimpan dalam sebuah antrian. Di dalam antrian yang sama, pesan-pesan diurutkan berdasarkan prinsip first in, first out, yang dijamin oleh RabbitMQ dan biasanya tidak perlu menjadi perhatian bagi para pengembang.
Catatan: Urutan pesan di antrian-antrian yang berbeda tidak dijamin. Misalnya, ketika memasuki stasiun kereta bawah tanah, jika Anda bergabung dengan salah satu dari tiga antrian, urutan masuk ke dalam stasiun tidak dapat dijamin antara antrian-antrian yang berbeda.
Urutan konsumsi pesan
Ketika membahas bagaimana memastikan urutan pesan, biasanya kita merujuk pada urutan di mana konsumen mengkonsumsi pesan. Dalam skenario di mana beberapa konsumen mengkonsumsi pesan dari antrian pesan yang sama, biasanya tidak mungkin untuk menjamin urutan pesan. Seperti yang ditunjukkan dalam diagram awal, meskipun pesan-pesan dalam antrian pesan diurutkan, konsumen-konsumen banyak yang secara bersamaan mengkonsumsi pesan, kecepatan mengambil pesan, kecepatan menjalankan logika bisnis, dan kemungkinan pengecualian eksekusi semua dapat menyebabkan urutan pesan yang tidak konsisten.
Sebagai contoh: Pesan A, B, dan C masuk dalam antrian secara berurutan. Konsumen A1 mendapatkan pesan A, dan konsumen B1 mendapatkan pesan B. Namun, jika konsumen B1 menjalankan lebih cepat, ia mungkin menyelesaikan lebih dulu sebelum konsumen A1, atau jika konsumen A1 mengalami kesalahan, kedua skenario dapat menyebabkan urutan pesan yang tidak konsisten.
Solusi umum untuk masalah konsumsi secara berurutan adalah hanya memiliki satu konsumen dalam sebuah antrian Dengan cara ini, pesan-pesan dapat diproses satu per satu secara berurutan. Kekurangannya adalah kemampuan konkurensi berkurang, dan konsumsi pesan secara bersamaan tidak mungkin. Ini merupakan sebuah trade-off.
Catatan: Jika bisnis memerlukan konsumsi berurutan dan peningkatan konkurensi, pendekatan umum adalah dengan mengaktifkan beberapa antrian. Bisnis dapat mendistribusikan pesan-pesan ke antrian-antrian yang berbeda berdasarkan aturan, sehingga meningkatkan tingkat konkurensi. Misalnya, dalam skenario pemesanan e-commerce, hanya perlu memastikan urutan pesan pesanan untuk pengguna yang sama. Pesan-pesan yang dimiliki oleh pengguna yang berbeda dapat diarahkan ke antrian-antrian yang berbeda.