Artikel ini adalah artikel cermin dari terjemahan mesin, silakan klik di sini untuk melompat ke artikel aslinya.

Melihat: 44647|Jawab: 8

[Formulir Menang] rabbitMQ Queue Queue Message Persistence [dengan kode sumber]

[Salin tautan]
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, silakanJawab





Mantan:Pesan pengecualian: "StrongTypingException: IsPrima...
Depan:Pengantar delegasi C# (delegasi, Tindakan, Func, predikat)
Diposting pada 09/04/2018 13.17.51 |
Belajar belajar
Diposting pada 25/06/2019 23.22.47 |
Belajar belajar
Diposting pada 29/06/2019 09.36.23 |
Mengapa saya tidak melihat demonya, saya harus membalas untuk melihatnya
Diposting pada 09/07/2019 17.34.42 |
Saya ingin kode sumber C#
Diposting pada 24/07/2019 14.21.51 |
Itu bagus, itu persis yang saya butuhkan
Diposting pada 11/04/2020 14.34.54 |
Belajar
Diposting pada 01/01/2022 14.45.24 |
1111111111111111
 Tuan tanah| Diposting pada 03/05/2023 22.12.22 |
Parameter Antrian RabbitMQ dan artinya


/**
* Buat antrean baru, diberi nama, bendera daya tahan, dan bendera hapus otomatis, dan argumen.
* @param beri nama antrian - tidak boleh null; Atur ke "" agar broker membuat nama.
* @param tahan lama benar jika kita mendeklarasikan antrian yang tahan lama (antrean akan bertahan setelah restart server)
* @param true eksklusif jika kita mendeklarasikan antrean eksklusif (antrean hanya akan digunakan oleh deklarator
* koneksi)
* @param autoDelete true jika server harus menghapus antrean saat tidak lagi digunakan
* @param argumen argumen yang digunakan untuk mendeklarasikan antrean
*/
public Queue(Nama string, boolean tahan lama, eksklusif boolean, boolean autoDelete, Map<String, Object> argumen) {
   Assert.notNull(name, "'name' tidak boleh null");
   this.name = nama;
   this.actualName = StringUtils.hasText(name) ? Nama
         : (Base64UrlNamingStrategy.DEFAULT.generateName() + "_awaiting_declaration");
   this.durable = tahan lama;
   this.exclusive = eksklusif;
   this.autoDelete = autoDelete;
   this.arguments = argumen != null ? argumen : HashMap baru<>();
}

Pengenalan parameter:
1. Nama: nama antrean;
2. actualName: Nama asli antrean, parameter name digunakan secara default, jika namanya kosong, satu dihasilkan sesuai dengan aturan;
3. tahan lama: apakah itu persisten;
4. Eksklusif: apakah itu eksklusif atau eksklusif;
5. autoDelete: apakah akan menghapus secara otomatis;
6. Argumen: Parameter atribut lain dari antrean memiliki opsi berikut, lihat Argumen pada Gambar 2:
(1) x-message-ttl: waktu kedaluwarsa pesan, dalam milidetik;
(2) x-expires: waktu kedaluwarsa antrean, berapa lama antrian akan dihapus jika tidak diakses, unit: milidetik;
(3) x-max-length: panjang maksimum antrean, jika melebihi nilai maksimum, pesan akan dihapus dari header antrean;
(4) x-max-length-bytes: konten pesan antrean menempati ruang maksimum, dibatasi oleh ukuran memori, dan jika melebihi ambang batas ini, pesan akan dihapus dari header antrean;
(5) x-overflow: Atur perilaku luapan antrean. Ini menentukan apa yang terjadi pada pesan ketika panjang maksimum antrean tercapai. Nilai yang valid adalah drop-head, reject-publish, atau reject-publish-dlx. Jenis antrean kuorum hanya mendukung drop-head;
(6) x-dead-letter-exchange: nama pertukaran surat mati, dan pesan yang telah kedaluwarsa atau telah dihapus (karena panjang antrian yang panjang atau ruang yang melebihi ambang batas) dapat ditentukan untuk dikirim ke bursa;
(7) x-dead-letter-routing-key: Kunci perutean pesan huruf mati, yang akan digunakan ketika pesan dikirim ke penukar huruf mati, jika tidak diatur, nilai kunci perutean asli pesan akan digunakan
(8) x-single-active-consumer: menunjukkan apakah antrean adalah konsumen aktif tunggal, jika true, hanya satu konsumen dalam grup konsumen terdaftar yang menggunakan pesan, yang lainnya diabaikan, dan false saat pesan didistribusikan ke semua konsumen dalam loop (default false)
(9) x-max-priority: jumlah maksimum prioritas yang akan didukung oleh antrean; Jika tidak diatur, antrean tidak akan mendukung prioritas pesan;
(10) x-queue-mode (Mode malas): Atur antrean ke mode penundaan, simpan pesan sebanyak mungkin di disk untuk mengurangi penggunaan RAM; Jika tidak diatur, antrean akan menyimpan cache memori untuk mengirimkan pesan secepat mungkin;
(11) x-queue-master-locator: Atur informasi simpul master dari antrean cermin dalam mode kluster.


Sanggahan:
Semua perangkat lunak, materi pemrograman, atau artikel yang diterbitkan oleh Code Farmer Network hanya untuk tujuan pembelajaran dan penelitian; Konten di atas tidak boleh digunakan untuk tujuan komersial atau ilegal, jika tidak, pengguna akan menanggung semua konsekuensi. Informasi di situs ini berasal dari Internet, dan sengketa hak cipta tidak ada hubungannya dengan situs ini. Anda harus sepenuhnya menghapus konten di atas dari komputer Anda dalam waktu 24 jam setelah pengunduhan. Jika Anda menyukai program ini, harap dukung perangkat lunak asli, pembelian pendaftaran, dan dapatkan layanan asli yang lebih baik. Jika ada pelanggaran, silakan hubungi kami melalui email.

Mail To:help@itsvse.com