Denna artikel är en spegelartikel om maskinöversättning, klicka här för att hoppa till originalartikeln.

Utsikt: 24043|Svar: 0

[WinForm] .net/c# RabbitMQ-anslutningsavkoppling - frånkoppling och återanslutning

[Kopiera länk]
Publicerad på 2018-03-29 16:30:04 | | | |
Den officiella NET-konsumentkoden som ges av Rabbitmq är följande, men under användningsprocessen kommer du att stöta på problemet med anslutningsavbrott, och när den är frånkopplad rapporterar denna kod ett fel, vilket gör att konsumenter eller producenter lägger på.

Följande bild visar producenten som skickar ett meddelande, jag avslutade rabbitmq manuellt och startade sedan om rabbitmq, troligen efter att starten var lyckad, jag väntade ytterligare 10 sekunder för att förhindra att tjänsten startade helt

När tjänsten är helt igång försöker jag skicka om några meddelanden med följande felmeddelanden:

Ovanlig 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=
   I RabbitMQ.Client.Impl.SessionBase.Transmit(Command cmd)
   på RabbitMQ.Client.Impl.ModelBase.ModelSend(MethodBase-metoden, ContentHeaderBase-header, Byte[] body)
   på RabbitMQ.Client.Impl.ModelBase.BasicPublish (Strängutbyte, SträngroutingKey, boolesk mandator, IBasicProperties basicProperties, Byte[]-kropp)
   på RabbitMQ.Client.Impl.ModelBase.BasicPublish(Strängutbyte, SträngroutingKey, IBasicProperties basicProperties, Byte[]-kropp)
   På rabbitMQ_Publish.Form1.button1_Click(Object sender, EventArgs e) position C:\project\my\RabbitMQ-demo\rabbitMQ-Publish\Form1.cs: radnummer 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å hur kan det återhämtas onormalt? Eller kopplas den bort och återansluts?

Källkoden till RabbitMQ NET Client, forskningen fann en sådanAutomaticRecoveryEnabled = trueSå här använder du den


Den specifika återhämtningsmekanismen är som följer

1. När AutoRecoveringConnection initieras, lägg till avbrottshantering till länkstängningshändelsedelegaten


Observera anropet BeginAutomaticRecovery, så kan du se att PerformAutomaticRecovery-metoden kallas internt. Låt oss titta direkt på innehållet i denna metod, där den första är metoden RecoverConnectionDelegate



Anropet i denna metod är:

Som du kan se kör den en dödloop tills anslutningen öppnas igen, och om den stöter på ett undantag anropar den Thread.Sleep för att vänta en stund och utför sedan anslutningsåterställning igen.




Föregående:Introduktion till de tre utbyteslägena (fanout, direkt och ämne) i RabbitMQ
Nästa:Lär dig hur du sätter upp din egen DNS-server!
Friskrivning:
All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer Network är endast för lärande- och forskningsändamål; Ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars kommer användarna att bära alla konsekvenser. Informationen på denna sida kommer från internet, och upphovsrättstvister har inget med denna sida att göra. Du måste helt radera ovanstående innehåll från din dator inom 24 timmar efter nedladdning. Om du gillar programmet, vänligen stöd äkta programvara, köp registrering och få bättre äkta tjänster. Om det finns något intrång, vänligen kontakta oss via e-post.

Mail To:help@itsvse.com