Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 24043|Antwort: 0

[WinForm] .net/c# RabbitMQ Verbindungsabbruch – Abschaltung und Wiederverbindung

[Link kopieren]
Veröffentlicht am 29.03.2018 16:30:04 | | | |
Der offizielle NET-Verbraucher-Beispielcode von Rabbitmq lautet wie folgt: Während des Nutzungsprozesses treten Sie auf das Problem der Verbindungsabbrüche. Nach der Trennung meldet dieser Code einen Fehler, der dazu führt, dass Konsumenten oder Hersteller auflegen.

Das folgende Bild zeigt, wie der Hersteller eine Nachricht sendet: Ich habe rabbitmq manuell gestoppt und dann rabbitmq neu gestartet, wahrscheinlich nachdem der Start erfolgreich war, ich habe weitere 10 Sekunden gewartet, um zu verhindern, dass der Service komplett startet.

Nachdem der Dienst vollständig gestartet ist, versuche ich, einige Nachrichten mit folgenden Fehlern erneut zu senden:

Ungewöhnlicher 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=
   In RabbitMQ.Client.Impl.SessionBase.Transmit(Command cmd)
   at RabbitMQ.Client.Impl.ModelBase.ModelSend(MethodBase-Methode, ContentHeaderBase-Header, Byte[] body)
   bei RabbitMQ.Client.Impl.ModelBase.BasicPublish (String-Austausch, String-RoutingKey, boolesche mandatory, IBasicProperties basicProperties, Byte[]-Body)
   bei RabbitMQ.Client.Impl.ModelBase.BasicPublish (String-Austausch, String-RoutingKey, IBasicProperties basicProperties, Byte[]-Body)
   Unter rabbitMQ_Publish.Form1.button1_Click(Objektsender, EventArgs e) Position C:\project\my\RabbitMQ-demo\rabbitMQ-Publish\Form1.cs: Zeilennummer 37
   In System.Windows.Forms.Control.OnClick(EventArgs e)
   In System.Windows.Forms.Button.OnClick(EventArgs e)
   In System.Windows.Forms.Button.PerformClick()
   bei System.Windows.Forms.Form.ProcessDialogKey(Keys keyData)
   bei 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)
   Bei System.Windows.Forms.Application.ThreadContext.PreTranslateMessage(MSG& msg)





Wie kann es also abnormal wiederhergestellt werden? Oder wird es getrennt und wieder angeschlossen?

Der Quellcode des RabbitMQ NET Client, die Forschung ergab einen solchenAutomaticRecoveryEnabled = trueSo benutzt man es


Der spezifische Wiederherstellungsmechanismus ist wie folgt

1. Wenn AutoRecoveringConnection initialisiert wird, fügen Sie die Disconnection-Handling dem Link-Close-Event-Delegaten hinzu


Beachten Sie den Aufruf BeginAutomaticRecovery, und Sie sehen, dass die Methode PerformAutomaticRecovery intern aufgerufen wird. Schauen wir uns direkt den Inhalt dieser Methode an, wobei die erste die Methode RecoverConnectionDelegate ist



Der Aufruf in dieser Methode lautet:

Wie du siehst, führt es eine Deadloop aus, bis die Verbindung wieder geöffnet wird, und natürlich, wenn es eine Ausnahme gibt, ruft es Thread.Sleep auf, um eine Weile zu warten, und führt dann erneut die Verbindungswiederherstellung durch.




Vorhergehend:Einführung in die drei Austauschmodi (Fanout, Direct und Topic) von RabbitMQ
Nächster:Ich bringe dir bei, wie du deinen eigenen DNS-Server einrichtest!
Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com