Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 24043|Odpoveď: 0

[WinForm] .net/c# RabbitMQ odpojenie a opätovné pripojenie

[Kopírovať odkaz]
Zverejnené 29. 3. 2018 16:30:04 | | | |
Oficiálny NET spotrebiteľský vzorový kód od Rabbitmq je nasledovný, ale počas používania sa stretnete s problémom odpojenia pripojenia; po odpojení tento kód nahlási chybu, ktorá spôsobí, že spotrebitelia alebo výrobcovia zložia.

Nasledujúca fotka ukazuje, že producent posiela správu, manuálne som zastavil rabbitmq a potom reštartoval rabbitmq, pravdepodobne po úspešnom spustení, čakal som ďalších 10 sekúnd, aby som zabránil úplnému spusteniu služby

Po úplnom spustení služby sa snažím znovu poslať niektoré správy s chybami nasledovne:

Nezvyčajný text **************
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)
   at RabbitMQ.Client.Impl.ModelBase.BasicPublish(Výmena reťazcov, String routingKey, Boolean povinný, IBasicProperties basicProperties, Byte[] body)
   at RabbitMQ.Client.Impl.ModelBase.BasicPublish(Výmena reťazcov, String routingKey, IBasicProperties basicProperties, Byte[] body)
   Na rabbitMQ_Publish.Form1.button1_Click(Object sender, EventArgs e) pozícia C:\project\my\RabbitMQ-demo\rabbitMQ-Publish\Form1.cs: riadok číslo 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)





Ako sa teda dá abnormálne obnoviť? Alebo je to odpojené a znovu pripojené?

Zdrojový kód RabbitMQ NET Client, výskum zistil, že jedenAutomaticRecoveryEnabled = pravdaTu je návod, ako ho používať


Konkrétny mechanizmus zotavenia je nasledovný

1. Keď sa inicializuje AutoRecoveringConnection, pridajte spracovanie odpojenia do delegáta udalosti uzatvárania linky


Pozrite si volanie BeginAutomaticRecovery a uvidíte, že metóda PerformAutomaticRecovery je volaná interne. Pozrime sa priamo na obsah tejto metódy, prvou z nich je metóda RecoverConnectionDelegate



Volanie v tejto metóde je:

Ako vidíte, vykonáva mŕtvu slučku až do opätovného otvorenia spojenia a samozrejme, ak narazí na výnimku, zavolá Thread.Sleep, aby chvíľu počkal, a potom opäť vykoná obnovu spojenia.




Predchádzajúci:Úvod do troch výmenných režimov (fanout, priamy a tematický) v RabbitMQ
Budúci:Naučí vás, ako si nastaviť vlastný DNS server!
Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com