Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 24043|Svare: 0

[WinForm] .net/c# RabbitMQ-tilkobling frakoblet - frakobling og rekobling

[Kopier lenke]
Publisert på 29.03.2018 16:30:04 | | | |
Den offisielle NET-forbrukerkoden gitt av Rabbitmq er som følger, men under bruksprosessen vil du støte på problemet med tilkoblingsbrudd; når den kobles fra, vil denne koden rapportere en feil, noe som vil føre til at forbrukere eller produsenter legger på.

Bildet nedenfor viser produsenten sende en melding, jeg stoppet rabbitmq manuelt, og startet rabbitmq på nytt, sannsynligvis etter at starten var vellykket, jeg ventet i ytterligere 10 sekunder for å hindre at tjenesten startet helt

Etter at tjenesten er helt i gang, prøver jeg å sende noen meldinger på nytt med følgende feil:

Uvanlig 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(Strengutveksling, StrengrutingKey, boolsk mandatory, IBasicProperties basicProperties, Byte[]-kropp)
   på RabbitMQ.Client.Impl.ModelBase.BasicPublish(Strengutveksling, StrengrutingKey, IBasicProperties basicProperties, Byte[]-kropp)
   På rabbitMQ_Publish.Form1.button1_Click(Object sender, EventArgs e) posisjon 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 bli unormalt gjenopprettet? Eller er den koblet fra og koblet til igjen?

Kildekoden til RabbitMQ NET Client, forskningen fant énAutomaticRecoveryEnabled = trueSlik bruker du det


Den spesifikke gjenopprettingsmekanismen er som følger

1. Når AutoRecoveringConnection initialiseres, legg til frakoblingshåndtering i delegaten for lenkelukkingshendelsen


Se på BeginAutomaticRecovery-kallet, og du kan se at PerformAutomaticRecovery-metoden kalles internt. La oss se direkte på innholdet i denne metoden, hvor den første er metoden RecoverConnectionDelegate



Kallet i denne metoden er:

Som du ser, kjører den en død løkke til tilkoblingen åpnes igjen, og selvfølgelig, hvis den møter et unntak, kaller den Thread.Sleep for å vente en stund og utfører deretter tilkoblingsgjenoppretting igjen.




Foregående:Introduksjon til de tre utvekslingsmodusene (fanout, direkte og tema) i RabbitMQ
Neste:Lære deg hvordan du setter opp din egen DNS-server!
Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com