|
|
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 RabbitMQBudúci:Naučí vás, ako si nastaviť vlastný DNS server!
|