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

Melihat: 24043|Jawab: 0

[Formulir Menang] .net/c# Pemutusan koneksi RabbitMQ - pemutusan dan koneksi ulang

[Salin tautan]
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) RabbitMQ
Depan:Mengajari Anda cara menyiapkan server DNS Anda sendiri!
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