|
|
Diposting pada 09/04/2018 10.23.21
|
|
|
|

Secara default, pesan antrean rabbitMQ tidak disimpan ke hard disk, yang berarti bahwa setelah layanan rabbitMQ dimulai ulang, pesan akan hilang.
Persistensi antrian
Misalnya, persistensi antrean diidentifikasidurablediatur ke true, yang berarti ini adalah antrean persisten, kemudian setelah layanan dimulai ulang, itu juga akan ada, karena layanan akan menyimpan antrean yang dipertahankan di hard disk, dan ketika layanan dimulai ulang, itu akan menetapkan kembali apa yang sebelumnya diteruskan. Antrean dapat dipertahankan, tetapi apakah pesan di dalamnya persisten bergantung pada pengaturan persistensi pesan. Dengan kata lain, jika tidak ada pesan yang dikirim dalam antrean sebelum restart, apakah pesan asli masih ada dalam antrean setelah restart bergantung pada pengaturan pesan yang terjadi saat pesan dikirim. Jika Anda ingin menjaga pesan tetap bertahan setelah restart, Anda harus mengatur identitas bahwa pesan tersebut dipertahankan.
Menyiapkan persistensi antrean:
Parameter keempat dari metode ini, autoDelete, biasanya dimasukkan false. Dokumentasi menjelaskan parameter ini jika true, yang berarti bahwa jika antrean tidak lagi digunakan (tidak berlangganan), server akan menghapusnya. Selama pengujian saya, selama semua penerima antrean perubahan koneksi terputus, antrean dihapus, meskipun masih ada pesan yang belum diproses di dalamnya. RabbitMQ restart juga akan menghapusnya. Jika false dimasukkan, layanan tidak akan menghapus antrean dan pesan dalam antrean akan ada jika semua klien yang terhubung dengannya terputus. Pengirim juga dapat memasukkan pesan ke dalam antrean perubahan ketika tidak ada koneksi klien, dan ketika klien muncul, ia akan mendapatkan pesan ini. Namun, jika layanan RabbitMQ dimulai ulang, antrian akan hilang, dan pesan di dalamnya akan hilang secara alami.
Parameter ketiga bersifat eksklusif, dan dokumentasi menyatakan bahwa jika benar, maka koneksi antrean terputus, maka antrean dihapus, termasuk pesan di dalamnya.
Parameter kedua, tahan lama, dijelaskan dalam dokumentasi yang mengatakan bahwa jika true, itu mewakili antrean persisten, yang juga akan ada setelah layanan dimulai ulang. Karena layanan akan menyimpan antrean persisten di hard disk, dan ketika layanan dimulai ulang, layanan akan menegaskan kembali antrean ini. Tentu saja, itu harus terjadi ketika autoDelete dan eksklusif salah. Antrean dapat dipertahankan, tetapi apakah pesan di dalamnya persisten bergantung pada pengaturan persistensi pesan. Dengan kata lain, jika masih ada pesan yang dikirim dalam antrean sebelum restart, apakah pesan asli masih ada dalam antrean setelah restart bergantung pada pengaturan pengirim untuk pesan saat mengirim pesan.
Setelah kita memodifikasi kode, kita mencoba menjalankannya, dan kesalahannya akan menjadi sebagai berikut:
Pengecualian yang tidak ditangani: RabbitMQ.Client.Exceptions.OperationInterruptedException: Operasi AMQP terganggu: AMQP close-reason, dimulai oleh Peer, code=406, text="PRECONDITION_FAILED - inequivalent arg 'durable' untuk antrian 'hello' di vhost 'myserver': menerima 'true' tetapi saat ini adalah 'false'", classId=50, methodId=10, cause=
Karena kita telah menentukan antrean yang tidak bertahan yang disebut hello. RabbitMQ tidak mengizinkan mendefinisikan ulang antrean yang ada dengan pengaturan parameter yang berbeda.
Ada dua solusi:
1: Mendeklarasikan ulang antrean dengan nama yang berbeda, seperti my_queue 2: Hapus antrian "halo" yang ditentukan dengan alamat http://localhost:15672 dan masuk dengan nama pengguna dan kata sandi. Kata sandi dan nama pengguna default untuk RabbitMQ adalah tamu. Klik kolom "antrian" untuk melihat daftar antrean, klik antrian "halo" untuk memperluas detail antrean. Tarik halaman ke akhir, ada item "Hapus", klik di atasnya, klik tombol "Hapus Antrean", dan Anda dapat menghapus antrean. Kemudian ketika kode dijalankan, antrean halo dibuat yang mendukung persistensi.
Persistensi pesan
Jika Anda ingin menjaga pesan tetap bertahan setelah memulai ulang, Anda harus mengatur pesan agar tetap ada. Pengaturannya adalah saat pengirim mengirimkannya, yang relatif sederhana, dan kodenya adalah sebagai berikut:
DeliveryMode default ke 1, tidak persisten, dan pengaturan ke 2 berarti pesan persisten
Setelah kami memodifikasi kode, kami mencoba hanya membuka program produsen untuk mengirim pesan, lalu mulai ulang layanan rabbitMQ, buka konsumen lagi, dan menemukan bahwa pesan tidak hilang.
(Akhir)
Terlampir adalah kode sumber C#:
Wisatawan, jika Anda ingin melihat konten tersembunyi dari posting ini, silakan Jawab
|
Mantan:Pesan pengecualian: "StrongTypingException: IsPrima...Depan:Pengantar delegasi C# (delegasi, Tindakan, Func, predikat)
|