Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 24043|Antwoord: 0

[WinForm] .net/c# RabbitMQ verbinding verbreken - verbinding verbreken en herverbinden

[Link kopiëren]
Geplaatst op 29-03-2018 16:30:04 | | | |
De officiële NET-consumentencode van Rabbitmq is als volgt, maar tijdens het gebruik krijg je het probleem van verbindingsverbreking; zodra deze code wordt losgekoppeld, rapporteert deze code een fout, waardoor consumenten of producenten ophangen.

De volgende foto toont de producent die een bericht stuurt, ik heb rabbitmq handmatig gestopt en daarna rabbitmq opnieuw gestart, waarschijnlijk nadat de start succesvol was, ik heb nog 10 seconden gewacht om te voorkomen dat de service volledig werd gestart

Nadat de dienst volledig is gestart, probeer ik enkele berichten opnieuw te sturen met de volgende fouten:

Ongebruikelijke 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=
   In RabbitMQ.Client.Impl.SessionBase.Transmit(Command cmd)
   op RabbitMQ.Client.Impl.ModelBase.ModelSend(MethodBase-method, ContentHeaderBase-header, Byte[] body)
   op RabbitMQ.Client.Impl.ModelBase.BasicPublish (String-uitwisseling, String routingKey, Boolean mandatory, IBasicProperties basicProperties, Byte[] body)
   op RabbitMQ.Client.Impl.ModelBase.BasicPublish(String-uitwisseling, String routingKey, IBasicProperties basicProperties, Byte[] body)
   Op rabbitMQ_Publish.Form1.button1_Click(Object sender, EventArgs e) positie C:\project\my\RabbitMQ-demo\rabbitMQ-Publish\Form1.cs: regel nummer 37
   In System.Windows.Forms.Control.OnClick(EventArgs e)
   In System.Windows.Forms.Button.OnClick(EventArgs e)
   In System.Windows.Forms.Button.PerformClick()
   op System.Windows.Forms.Form.ProcessDialogKey(Keys keyData)
   op System.Windows.Forms.TextBoxBase.ProcessDialogKey(Keys keyData)
   In System.Windows.Forms.Control.PreProcessMessage(Message& msg)
   In System.Windows.Forms.Control.PreProcessControlMessageInternal(Control target, Message& msg)
   Op System.Windows.Forms.Application.ThreadContext.PreTranslateMessage(MSG& msg)





Hoe kan het dan abnormaal worden hersteld? Of wordt hij losgekoppeld en weer aangesloten?

De broncode van de RabbitMQ NET Client, het onderzoek vond er eenAutomaticRecoveryEnabled = waarZo gebruik je het


Het specifieke herstelmechanisme is als volgt

1. Wanneer AutoRecoveringConnection wordt geïnitialiseerd, voeg dan disconnection handling toe aan de link close event delegate


Let op de BeginAutomaticRecovery-aanroep, en je ziet dat de PerformAutomaticRecovery-methode intern wordt aangeroepen. Laten we direct naar de inhoud van deze methode kijken, waarvan de eerste de methode RecoverConnectionDelegate is



De aanroep in deze methode is:

Zoals je ziet, voert het een dead loop uit totdat de verbinding weer wordt geopend, en natuurlijk, als er een uitzondering tegenkomt, roept het Thread.Sleep aan om even te wachten en voert dan opnieuw verbindingsherstel uit.




Vorig:Introductie tot de drie uitwisselingsmodi (fanout, direct en topic) van RabbitMQ
Volgend:Leer je hoe je je eigen DNS-server opzet!
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com