Ez a cikk egy tükör gépi fordítás, kérjük, kattintson ide, hogy ugorjon az eredeti cikkre.

Nézet: 24043|Válasz: 0

[WinForm] .net/c# RabbitMQ kapcsolatmegszakítás – megszakítás és újracsatlakozás

[Linket másol]
Közzétéve 2018. 03. 29. 16:30:04 | | | |
A Rabbitmq hivatalos NET fogyasztói mintakódja a következő, de a használat során kapcsolatmegszakítás problémája jelentkezik, és a megszakítás után ez a kód hibát jelent, ami miatt a fogyasztók vagy a gyártók leteszik a telefont.

A következő képen a producer üzenetet küld, manuálisan állítottam le a rabbitmq-t, majd újraindítottam, valószínűleg a sikeres indítás után vártam még 10 másodpercet, hogy megakadályozza a szolgáltatás teljes elindulását

Miután a szolgáltatás teljesen elindult, megpróbálok néhány hibás üzenetet újra küldeni az alábbiakkal:

Szokatlan szöveg **************
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=
   A RabbitMQ.Client.Impl.SessionBase.Transmit(parancsparancs cmd) fájlban
   at RabbitMQ.Client.Impl.ModelBase.ModelSend(MethodBase method, ContentHeaderBase header, Byte[] body)
   at RabbitMQ.Client.Impl.ModelBase.BasicPublish (String exchange, String routingKey, Boolean mandatory, IBasicProperties basicProperties, Byte[] body)
   at RabbitMQ.Client.Impl.ModelBase.BasicPublish (String exchange, String routingKey, IBasicProperties basicProperties, Byte[] body)
   A rabbitMQ_Publish.Form1.button1_Click(Object felder, EventArgs e) pozíció C:\project\my\RabbitMQ-demo\rabbitMQ-Publish\Form1.cs: 37. sor
   In System.Windows.Forms.Control.OnClick(EventArgs e)
   In System.Windows.Forms.Button.OnClick(EventArgs e)
   In System.Windows.Forms.Button.PerformClick()
   at System.Windows.Forms.Form.ProcessDialogKey(Keys keyData)
   at System.Windows.Forms.TextBoxBase.ProcessDialogKey(Keys keyData)
   In System.Windows.Forms.Control.PreProcessMessage(Message& msg)
   A System.Windows.Forms.Control.PreProcessControlMessageInternal(Control target, Message&msg)
   A System.Windows.Forms.Application.ThreadContext.PreTranslateMessage(MSG& msg) címen





Hogyan lehet akkor rendellenesen helyreállítani? Vagy leválasztják és újra csatlakoztatják?

A RabbitMQ NET Client forráskódja a kutatás során találtak egyet.AutomaticRecoveryEnabled = trueÍme, hogyan lehet használni


A konkrét helyreállítási mechanizmus a következő:

1. Amikor AutoRecoveringConnection inicializálódik, adjunk hozzá a megszakítási kezelést a link close event delegate-hoz


Figyeld meg a BeginAutomaticRecovery hívást, és láthatod, hogy a PerformAutomaticRecovery metódus belső hívással van megidézve. Nézzük meg közvetlenül ennek a módszernek a tartalmát, az első a RecoverConnectionDelegate módszer



A módszer a következő hívás:

Ahogy látod, holtciklust hajt végre, amíg a kapcsolat újra meg nem nyílik, és természetesen, ha kivételt talál, a Thread.Sleep-et hívja, hogy várjon egy ideig, majd újra végrehajtja a kapcsolat helyreállítását.




Előző:Bevezetés a RabbitMQ három cseremódjához (fanout, direct és topic)
Következő:Megtanítalak, hogyan állíts be saját DNS szervert!
Lemondás:
A Code Farmer Network által közzétett összes szoftver, programozási anyag vagy cikk kizárólag tanulási és kutatási célokra szolgál; A fenti tartalmat nem szabad kereskedelmi vagy illegális célokra használni, különben a felhasználók viselik az összes következményet. Az oldalon található információk az internetről származnak, és a szerzői jogi vitáknak semmi köze ehhez az oldalhoz. A fenti tartalmat a letöltés után 24 órán belül teljesen törölni kell a számítógépéről. Ha tetszik a program, kérjük, támogassa a valódi szoftvert, vásároljon regisztrációt, és szerezzen jobb hiteles szolgáltatásokat. Ha bármilyen jogsértés történik, kérjük, vegye fel velünk a kapcsolatot e-mailben.

Mail To:help@itsvse.com