Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 24043|Atsakyti: 0

[WinForm] .net/c# RabbitMQ ryšio atjungimas - atjungimas ir pakartotinis prijungimas

[Kopijuoti nuorodą]
Paskelbta 2018-03-29 16:30:04 | | | |
Oficialus "Rabbitmq" pateiktas NET vartotojo pavyzdžio kodas yra toks, tačiau naudojimo metu susidursite su ryšio atjungimo problema, atjungus šį kodą bus pranešta apie klaidą, dėl kurios vartotojai ar gamintojai padės ragelį.

Šiame paveikslėlyje parodyta, kaip gamintojas siunčia pranešimą, aš rankiniu būdu sustabdžiau rabbitmq, o tada iš naujo paleidau rabbitmq, tikriausiai po to, kai paleidimas buvo sėkmingas, palaukiau dar 10 sekundžių, kad paslauga neprasidėtų visiškai

Visiškai paleidus paslaugą, bandau iš naujo išsiųsti kai kuriuos pranešimus su klaidomis taip:

Neįprasta teksto **************
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(Komanda cmd)
   at RabbitMQ.Client.Impl.ModelBase.ModelSend(MethodBase metodas, ContentHeaderBase antraštė, Byte[] body)
   at RabbitMQ.Client.Impl.ModelBase.BasicPublish(Eilučių mainai, Eilutės maršrutizavimo raktas, Bulio logikos privalomas, IBasicProperties basicProperties, Byte[] body)
   at RabbitMQ.Client.Impl.ModelBase.BasicPublish(String exchange, String routingKey, IBasicProperties basicProperties, Byte[] body)
   Prie rabbitMQ_Publish.Form1.button1_Click(Objekto siuntėjas, EventArgs e) pozicija C:\project\my\RabbitMQ-demo\rabbitMQ-Publish\Form1.cs: eilutės numeris 37
   System.Windows.Forms.Control.OnClick(EventArgs e)
   System.Windows.Forms.Button.OnClick(EventArgs e)
   In System.Windows.Forms.Button.PerformClick()
   System.Windows.Forms.Form.ProcessDialogKey(Keys keyData)
   System.Windows.Forms.TextBoxBase.ProcessDialogKey(Keys keyData)
   System.Windows.Forms.Control.PreProcessMessage(Pranešimas& msg)
   System.Windows.Forms.Control.PreProcessControlMessageInternal(Valdymo tikslas, Pranešimas ir pranešimas)
   System.Windows.Forms.Application.ThreadContext.PreTranslateMessage(MSG& msg)





Taigi, kaip jis gali būti neįprastai atkurtas? O gal jis atjungtas ir vėl prijungtas?

Tyrimas nustatė, kad "RabbitMQ NET Client" šaltinio kodasAutomaticRecoveryEnabled = teisingaŠtai kaip juo naudotis


Specialus susigrąžinimo mechanizmas yra toks

1. Kai inicijuojamas automatinis atkūrimas, pridėkite atjungimo tvarkymą prie nuorodos uždarymo įvykio atstovo


Stebėkite "BeginAutomaticRecovery" skambutį ir pamatysite, kad "PerformAutomaticRecovery" metodas iškviečiamas viduje. Pažvelkime tiesiai į šio metodo turinį, iš kurių pirmasis yra metodas "RecoverConnectionDelegate"



Šio metodo skambutis yra:

Kaip matote, jis vykdo negyvą kilpą, kol ryšys vėl atsidaro, ir, žinoma, jei susiduria su išimtimi, iškviečia "Thread.Sleep", kad šiek tiek palauktų, o tada vėl atkuria ryšį.




Ankstesnis:Įvadas į tris RabbitMQ mainų režimus (fanout, tiesioginis ir tema)
Kitą:Išmokykite, kaip nustatyti savo DNS serverį!
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com