|
|
Diposting pada 29/03/2018 16.30.04
|
|
|
|

Kode sampel konsumen NET resmi yang diberikan oleh Rabbitmq adalah sebagai berikut, namun selama proses penggunaan, Anda akan mengalami masalah pemutusan koneksi, setelah terputus, kode ini akan melaporkan kesalahan, yang akan menyebabkan konsumen atau produsen menutup telepon.
Gambar berikut menunjukkan produser mengirim pesan, saya menghentikan rabbitmq secara manual, dan kemudian memulai ulang rabbitmq, mungkin setelah start berhasil, saya menunggu 10 detik lagi untuk mencegah layanan dimulai sepenuhnya
Setelah layanan dimulai sepenuhnya, saya mencoba mengirim ulang beberapa pesan dengan kesalahan sebagai berikut:
Teks yang Tidak Biasa **************
RabbitMQ.Client.Exceptions.AlreadyClosedException: Already closed: The AMQP operation was interrupted: AMQP close-reason, initiated by Peer, code=320, text="CONNECTION_FORCED - broker forced connection closure with reason 'shutdown'", classId=0, methodId=0, cause= Di RabbitMQ.Client.Impl.SessionBase.Transmit(Command cmd) di RabbitMQ.Client.Impl.ModelBase.ModelSend(MethodBase metode, header ContentHeaderBase, Byte[] body) di RabbitMQ.Client.Impl.ModelBase.BasicPublish(Pertukaran string, String routingKey, Boolean wajib, IBasicProperties basicProperties, Byte[] body) di RabbitMQ.Client.Impl.ModelBase.BasicPublish(Pertukaran string, String routingKey, IBasicProperties basicProperties, Byte[] body) Pada posisi rabbitMQ_Publish.Form1.button1_Click(Pengirim objek, EventArgs e) posisi C:\project\my\RabbitMQ-demo\rabbitMQ-Publish\Form1.cs: nomor baris 37 Di System.Windows.Forms.Control.OnClick(EventArgs e) Di System.Windows.Forms.Button.OnClick(EventArgs e) Di System.Windows.Forms.Button.PerformClick() di System.Windows.Forms.Form.ProcessDialogKey(KeyData) di System.Windows.Forms.TextBoxBase.ProcessDialogKey(KeyData) Di System.Windows.Forms.Control.PreProcessMessage(Message& msg) Di System.Windows.Forms.Control.PreProcessControlMessageInternal(Target kontrol, Message& msg) Di System.Windows.Forms.Application.ThreadContext.PreTranslateMessage(MSG& msg)
Jadi bagaimana itu bisa dipulihkan secara tidak normal? Atau apakah terputus dan terhubung kembali?
Kode sumber RabbitMQ NET Client, penelitian menemukan satuAutomaticRecoveryEnabled = trueBerikut cara menggunakannya
Mekanisme pemulihan spesifik adalah sebagai berikut
1. Saat AutoRecoveringConnection diinisialisasi, tambahkan penanganan pemutusan ke delegasi peristiwa tutup tautan
Amati panggilan BeginAutomaticRecovery, dan Anda dapat melihat bahwa metode PerformAutomaticRecovery dipanggil secara internal. Mari kita lihat langsung isi metode ini, yang pertama adalah metode RecoverConnectionDelegate
Panggilan dalam metode ini adalah:
Seperti yang Anda lihat, ia mengeksekusi loop mati hingga koneksi dibuka kembali, dan tentu saja, jika menemukan pengecualian, ia memanggil Thread.Sleep untuk menunggu beberapa saat dan kemudian melakukan pemulihan koneksi lagi.
|
Mantan:Pengantar tiga mode pertukaran (fanout, langsung, dan topik) RabbitMQDepan:Mengajari Anda cara menyiapkan server DNS Anda sendiri!
|