Jika Anda ingin sebuah antrian hanya terlihat oleh Anda sendiri, Anda dapat menggunakan fitur antrian eksklusif yang disediakan oleh ApsaraMQ for RabbitMQ untuk mendeklarasikan antrian tertentu sebagai eksklusif.
Apa itu antrian eksklusif?
Antrian eksklusif memiliki karakteristik berikut:
Antrian eksklusif hanya terlihat oleh saluran dalam koneksi pertama di mana Anda mendeklarasikan antrian tersebut sebagai eksklusif.
Setelah sebuah antrian dideklarasikan eksklusif dalam satu koneksi, Anda tidak dapat mendeklarasikan antrian eksklusif dengan nama yang sama di koneksi lainnya. Saluran di koneksi lainnya juga tidak dapat mengakses antrian eksklusif tersebut.
Antrian eksklusif secara otomatis dihapus jika koneksi dari antrian tersebut ditutup.
Bahkan jika Anda menyetel parameter
durableketruepada klien untuk mendeklarasikan antrian eksklusif sebagai persisten, antrian tersebut akan tetap dihapus dan data di dalam antrian dibersihkan jika koneksi dari antrian tersebut ditutup.
Skenario umum
Antrian eksklusif cocok untuk skenario di mana produsen dan konsumen berada dalam proses yang sama dan tidak sensitif terhadap kehilangan data.
Risiko
Antrian eksklusif dihapus dan data di dalam antrian dibersihkan jika koneksi dari antrian tersebut secara tidak sengaja ditutup dalam salah satu skenario berikut:
Pemanggilan metode
Close()oleh klien.Pembaruan atau restart abnormal Broker.
Timeout detak jantung koneksi.
Kesalahan lainnya seperti pembatasan.
Berhati-hatilah saat menggunakan antrian eksklusif.
Cara mendeklarasikan antrian eksklusif
Anda dapat menggunakan metode channel.queueDeclare dan menyetel parameter exclusive ke true untuk mendeklarasikan antrian eksklusif dalam program klien.
Kode contoh berikut memberikan ilustrasi tentang cara mendeklarasikan antrian eksklusif dalam Java:
/**
* queue: nama antrian.
* durable: menentukan apakah antrian akan dipertahankan.
* exclusive: menentukan apakah antrian bersifat eksklusif.
* autoDelete: menentukan apakah antrian akan dihapus secara otomatis.
* arguments: parameter lainnya.
*/
channel.queueDeclare("queueName", true, true, false, null);