Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 24043|Răspunde: 0

[WinForm] .net/c# Deconectare conexiune RabbitMQ - deconectare și reconectare

[Copiază linkul]
Postat pe 29.03.2018 16:30:04 | | | |
Codul oficial NET pentru consumatori oferit de Rabbitmq este următorul, dar în timpul procesului de utilizare veți întâmpina problema deconectării conexiunii; odată deconectat, acest cod va raporta o eroare care va determina consumatorii sau producătorii să închidă telefonul.

Următoarea imagine arată producătorul trimițând un mesaj, am oprit manual rabbitmq, apoi am repornit rabbitmq, probabil după ce pornirea a fost reușită, am mai așteptat încă 10 secunde ca să împiedic pornirea completă a serviciului

După ce serviciul este complet pornit, încerc să retrimit câteva mesaje cu erori după cum urmează:

Text neobișnuit **************
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=
   În RabbitMQ.Client.Impl.SessionBase.Transmit(Command cmd)
   la RabbitMQ.Client.Impl.ModelBase.ModelSend(metoda MethodBase, antetul ContentHeaderBase, corpul Byte[])
   la RabbitMQ.Client.Impl.ModelBase.BasicPublish(Schimb de șiruri, String routingKey, Boolean obligatoriu, IBasicProperties basicProperties, corp Byte[])
   la RabbitMQ.Client.Impl.ModelBase.BasicPublish(Schimb de șiruri, Cheie de rutare de șiruri, IBasicProperties basicProperties, corp Byte[])
   La rabbitMQ_Publish.Form1.button1_Click(Object sender, EventArgs e) poziția C:\project\my\RabbitMQ-demo\rabbitMQ-Publish\Form1.cs: linia numărul 37
   În System.Windows.Forms.Control.OnClick(EventArgs e)
   În System.Windows.Forms.Button.OnClick(EventArgs e)
   În System.Windows.Forms.Button.PerformClick()
   la System.Windows.Forms.Form.ProcessDialogKey(Keys keyData)
   la System.Windows.Forms.TextBoxBase.ProcesDialogKey(Chei, keyData)
   În System.Windows.Forms.Control.PreProcessMessage(Message& msg)
   În System.Windows.Forms.Control.PreProcessControlMessageInternal(Control target, Message& msg)
   La System.Windows.Forms.Application.ThreadContext.PreTranslateMessage(MSG& msg)





Deci cum poate fi recuperată anormal? Sau este deconectat și reconectat?

Codul sursă al clientului RabbitMQ NET, cercetarea a găsit unulAutomatRecoveryEnabled = adevăratIată cum să o folosești


Mecanismul specific de recuperare este următorul

1. Când AutoRecoveringConnection este inițializat, adăugați gestionarea deconectării la delegatul evenimentului de închidere a legăturii


Observați apelul BeginAutomaticRecovery și puteți vedea că metoda PerformAutomaticRecovery este numită intern. Să analizăm direct conținutul acestei metode, prima fiind metoda RecoverConnectionDelegate



Apelul în această metodă este:

După cum vezi, execută o buclă moartă până când conexiunea se redeschide și, desigur, dacă întâlnește o excepție, apelează la Thread.Sleep să aștepte puțin și apoi efectuează din nou recuperarea conexiunii.




Precedent:Introducere în cele trei moduri de schimb (fanout, direct și topic) ale RabbitMQ
Următor:Te învăț cum să-ți configurezi propriul server DNS!
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com