Ta članek je zrcalni članek strojnega prevajanja, kliknite tukaj za skok na izvirni članek.

Pogled: 24043|Odgovoriti: 0

[WinForm] .net/c# RabbitMQ prekinitev povezave – prekinitev in ponovna povezava

[Kopiraj povezavo]
Objavljeno na 29. 03. 2018 16:30:04 | | | |
Uradna NET koda za potrošnike, ki jo ponuja Rabbitmq, je naslednja, vendar se boste med uporabo srečali s težavo prekinitve povezave; ko je koda prekinjena, bo ta koda poročala o napaki, zaradi katere bodo potrošniki ali proizvajalci prekinili klic.

Na naslednji sliki je producent poslal sporočilo, ročno sem ustavil rabbitmq in nato ponovno zagnal rabbitmq, verjetno po uspešnem zagonu, čakal sem še 10 sekund, da preprečim popoln zagon storitve

Ko je storitev popolnoma zagnana, poskušam ponovno poslati nekaj sporočil z napakami, kot sledi:

Nenavadno besedilo **************
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=
   V RabbitMQ.Client.Impl.SessionBase.Transmit(Command cmd)
   at RabbitMQ.Client.Impl.ModelBase.ModelSend(MethodBase method, ContentHeaderBase header, Byte[] body)
   na RabbitMQ.Client.Impl.ModelBase.BasicPublish(String exchange, String routingKey, Boolean obvezno, IBasicProperties basicProperties, Byte[] body)
   na RabbitMQ.Client.Impl.ModelBase.BasicPublish(Izmenjava nizov, String routingKey, IBasicProperties basicProperties, Byte[] body)
   Na rabbitMQ_Publish.Form1.button1_Klik(Object sender, EventArgs e) položaj C:\project\my\RabbitMQ-demo\rabbitMQ-Publish\Form1.cs: vrstica številka 37
   In System.Windows.Forms.Control.OnClick(EventArgs e)
   In System.Windows.Forms.Button.OnClick(EventArgs e)
   V System.Windows.Forms.Button.PerformClick()
   at System.Windows.Forms.Form.ProcessDialogKey(Keys keyData)
   at System.Windows.Forms.TextBoxBase.ProcessDialogKey(Keys keyData)
   V System.Windows.Forms.Control.PreProcessMessage(Message& msg)
   V System.Windows.Forms.Control.PreProcessControlMessageInternal(Control target, Message& msg)
   At System.Windows.Forms.Application.ThreadContext.PreTranslateMessage(MSG& msg)





Kako se torej lahko nenormalno obnovi? Ali je odklopljen in ponovno povezan?

Izvorna koda RabbitMQ NET odjemalca, raziskava je odkrilaAutomaticRecoveryEnabled = resTukaj je, kako ga uporabljati


Specifičen mehanizem okrevanja je naslednji

1. Ko se inicializira AutoRecoveringConnection, dodajte obravnavo prekinitve povezave delegatu za dogodek zaprtja povezave


Opazujte klic BeginAutomaticRecovery in lahko vidite, da je metoda PerformAutomaticRecovery klicana interno. Poglejmo si neposredno vsebino te metode, prva med njimi je metoda RecoverConnectionDelegate



Klic v tej metodi je:

Kot vidite, izvede mrtvo zanko, dokler se povezava ne odpre, in seveda, če naleti na izjemo, pokliče Thread.Sleep, da počaka nekaj časa, nato pa ponovno izvede obnovitev povezave.




Prejšnji:Uvod v tri načine izmenjave (fanout, direct in topic) v RabbitMQ
Naslednji:Naučil vas bo, kako nastaviti svoj DNS strežnik!
Disclaimer:
Vsa programska oprema, programski materiali ali članki, ki jih izdaja Code Farmer Network, so namenjeni zgolj učnim in raziskovalnim namenom; Zgornja vsebina ne sme biti uporabljena v komercialne ali nezakonite namene, sicer uporabniki nosijo vse posledice. Informacije na tej strani prihajajo z interneta, spori glede avtorskih pravic pa nimajo nobene zveze s to stranjo. Zgornjo vsebino morate popolnoma izbrisati z računalnika v 24 urah po prenosu. Če vam je program všeč, podprite pristno programsko opremo, kupite registracijo in pridobite boljše pristne storitve. Če pride do kakršne koli kršitve, nas prosimo kontaktirajte po elektronski pošti.

Mail To:help@itsvse.com