Denne artikel er en spejling af maskinoversættelse, klik venligst her for at springe til den oprindelige artikel.

Udsigt: 24043|Svar: 0

[WinForm] .net/c# RabbitMQ forbindelsesafbrydelse - afbrydelse og genforbindelse

[Kopier link]
Opslået på 29/03/2018 16.30.04 | | | |
Den officielle NET-forbrugerkode, som Rabbitmq giver, er som følger, men under brugsprocessen vil du støde på problemet med forbindelsesafbrydelse; når den er afbrudt, vil denne kode rapportere en fejl, hvilket får forbrugere eller producenter til at lægge på.

Billedet nedenfor viser producenten, der sender en besked, jeg stoppede manuelt rabbitmq, og genstartede derefter rabbitmq, sandsynligvis efter starten var lykkedes, jeg ventede yderligere 10 sekunder for at forhindre, at tjenesten startede helt

Når tjenesten er fuldt startet, prøver jeg at sende nogle beskeder igen med følgende fejl:

Usædvanlig 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=
   I RabbitMQ.Client.Impl.SessionBase.Transmit(Command cmd)
   at RabbitMQ.Client.Impl.ModelBase.ModelSend(MethodBase-metode, ContentHeaderBase-header, Byte[] body)
   på RabbitMQ.Client.Impl.ModelBase.BasicPublish (Strengudveksling, Streng routingKey, boolesk mandatory, IBasicProperties basicProperties, Byte[] body)
   på RabbitMQ.Client.Impl.ModelBase.BasicPublish (Strengudveksling, Streng routingKey, IBasicProperties basicProperties, Byte[] body)
   På rabbitMQ_Publish.Form1.button1_Click(Object sender, EventArgs e) position C:\project\my\RabbitMQ-demo\rabbitMQ-Publish\Form1.cs: linje nummer 37
   I System.Windows.Forms.Control.OnClick(EventArgs e)
   I System.Windows.Forms.Button.OnClick(EventArgs e)
   I System.Windows.Forms.Button.PerformClick()
   på System.Windows.Forms.Form.ProcessDialogKey(Keys keyData)
   på System.Windows.Forms.TextBoxBase.ProcessDialogKey(Keys keyData)
   I System.Windows.Forms.Control.PreProcessMessage(Message& msg)
   I System.Windows.Forms.Control.PreProcessControlMessageInternal(Control target, Message& msg)
   På System.Windows.Forms.Application.ThreadContext.PreTranslateMessage(MSG& msg)





Så hvordan kan det blive unormalt genoprettet? Eller bliver den afbrudt og genforbundet?

Kildekoden til RabbitMQ NET Client, forskningen fandt enAutomaticRecoveryEnabled = sandSådan bruger du det


Den specifikke genopretningsmekanisme er som følger

1. Når AutoRecoveringConnection initialiseres, tilføj frakoblingshåndtering til linklukningsbegivenhedsdelegaten


Observer BeginAutomaticRecovery-kaldet, og du kan se, at PerformAutomaticRecovery-metoden kaldes internt. Lad os se direkte på indholdet af denne metode, hvor den første er metoden RecoverConnectionDelegate



Kaldet i denne metode er:

Som du kan se, kører den en død løkke, indtil forbindelsen åbner igen, og selvfølgelig, hvis den støder på en undtagelse, kalder den Thread.Sleep for at vente et stykke tid og udfører derefter forbindelsesgendannelse igen.




Tidligere:Introduktion til de tre udvekslingstilstande (fanout, direkte og emne) i RabbitMQ
Næste:Lære dig, hvordan du opsætter din egen DNS-server!
Ansvarsfraskrivelse:
Al software, programmeringsmaterialer eller artikler udgivet af Code Farmer Network er kun til lærings- og forskningsformål; Ovenstående indhold må ikke bruges til kommercielle eller ulovlige formål, ellers skal brugerne bære alle konsekvenser. Oplysningerne på dette site kommer fra internettet, og ophavsretstvister har intet med dette site at gøre. Du skal slette ovenstående indhold fuldstændigt fra din computer inden for 24 timer efter download. Hvis du kan lide programmet, så understøt venligst ægte software, køb registrering og få bedre ægte tjenester. Hvis der er nogen overtrædelse, bedes du kontakte os via e-mail.

Mail To:help@itsvse.com