See artikkel on masintõlke peegelartikkel, palun klõpsake siia, et hüpata algse artikli juurde.

Vaade: 24043|Vastuse: 0

[WinForm] .net/c# RabbitMQ ühenduse katkestus – ühenduse katkestamine ja taasühendamine

[Kopeeri link]
Postitatud 29.03.2018 16:30:04 | | | |
Rabbitmq poolt antud ametlik NET tarbija näidiskood on järgmine, kuid kasutusprotsessi käigus tekib ühenduse katkestamise probleem; pärast ühenduse katkestamist teatab see kood vea, mis põhjustab tarbijate või tootjate kõne katkestamise.

Järgmine pilt näitab, kuidas produtsent saadab sõnumi, ma peatasin rabbitmq käsitsi ja taaskäivitasin rabbitmq, tõenäoliselt pärast edukat käivitamist, ootasin veel 10 sekundit, et takistada teenuse täielikku käivitamist

Kui teenus on täielikult käivitatud, proovin saata mõningaid vigadega sõnumeid uuesti järgmiselt:

Ebatavaline tekst **************
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=
   RabbitMQ.Client.Impl.SessionBase.Transmit(Command cmd)
   aadressil RabbitMQ.Client.Impl.ModelBase.ModelSend(MethodBase meetod, ContentHeaderBase päis, Bait[] keha)
   aadressil RabbitMQ.Client.Impl.ModelBase.BasicPublish (string exchange, string routingKey, Boolean mandatory, IBasicProperties basicProperties, Byte[] body)
   aadressil RabbitMQ.Client.Impl.ModelBase.BasicPublish (stringivahetus, stringi routingKey, IBasicProperties basicProperties, Bait[] keha)
   Aadressil rabbitMQ_Publish.Form1.button1_Click(Objekti saatja, EventArgs e) asukoht C:\project\my\RabbitMQ-demo\rabbitMQ-Publish\Form1.cs: rida number 37
   In System.Windows.Forms.Control.OnClick(EventArgs e)
   System.Windows.Forms.Button.OnClick(EventArgs e)
   In System.Windows.Forms.Button.PerformClick()
   at System.Windows.Forms.Form.ProcessDialogKey(Keys keyData)
   aadressil System.Windows.Forms.TextBoxBase.ProcessDialogKey(Keys keyData)
   System.Windows.Forms.Control.PreProcessMessage(Message& msg)
   System.Windows.Forms.Control.PreProcessControlMessageInternal(Control target, Message&msg)
   Aadressil System.Windows.Forms.Application.ThreadContext.PreTranslateMessage(MSG& msg)





Kuidas saab seda siis ebanormaalselt taastada? Või on see lahti ühendatud ja uuesti ühendatud?

RabbitMQ NET Clienti lähtekood, uurimus leidis üheAutomaticRecoveryEnabled = tõeneSiin on, kuidas seda kasutada


Spetsiifiline taastumismehhanism on järgmine

1. Kui AutoRecoveringConnection on initsialiseerunud, lisa ühenduse katkestamise käsitlemine lingi sulgemise sündmuse delegaadile


Vaadake BeginAutomaticRecovery kutset ja näete, et PerformAutomaticRecovery meetod kutsutakse sisemiselt. Vaatame otse selle meetodi sisu, millest esimene on meetod RecoverConnectionDelegate



Selle meetodi kutsung on:

Nagu näha, käivitab see surnud tsükli kuni ühenduse taasavamiseni, ja loomulikult, kui tekib erand, kutsub ta Thread.Sleepi, et oodata, ja seejärel sooritab ühenduse taastamise uuesti.




Eelmine:Sissejuhatus RabbitMQ kolme vahetusrežiimi (fanout, otse ja teema) kohta
Järgmine:Õpetan sulle, kuidas oma DNS-serverit seadistada!
Disclaimer:
Kõik Code Farmer Networki poolt avaldatud tarkvara, programmeerimismaterjalid või artiklid on mõeldud ainult õppimiseks ja uurimistööks; Ülaltoodud sisu ei tohi kasutada ärilistel ega ebaseaduslikel eesmärkidel, vastasel juhul kannavad kasutajad kõik tagajärjed. Selle saidi info pärineb internetist ning autoriõiguste vaidlused ei ole selle saidiga seotud. Ülaltoodud sisu tuleb oma arvutist täielikult kustutada 24 tunni jooksul pärast allalaadimist. Kui sulle programm meeldib, palun toeta originaaltarkvara, osta registreerimist ja saa paremaid ehtsaid teenuseid. Kui esineb rikkumist, palun võtke meiega ühendust e-posti teel.

Mail To:help@itsvse.com