Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 24043|Odpověď: 0

[WinForm] .net/c# Připojení .net/c# RabbitMQ – odpojení a opětovné připojení

[Kopírovat odkaz]
Zveřejněno 29.03.2018 16:30:04 | | | |
Oficiální NET spotřebitelský vzorový kód od Rabbitmq je následující, ale během používání narazíte na problém s odpojením připojení; jakmile je odpojeno, tento kód nahlásí chybu, která způsobí, že spotřebitelé nebo výrobci zavěsí.

Následující obrázek ukazuje, jak producent posílá zprávu, ručně jsem rabbitmq zastavil a pak restartoval rabbitmq, pravděpodobně poté, co byl úspěšný start, čekal jsem dalších 10 sekund, abych zabránil úplnému spuštění služby

Po úplném spuštění služby se snažím znovu poslat několik zpráv s chybami, a to takto:

Neobvyklý 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(příkaz cmd)
   at RabbitMQ.Client.Impl.ModelBase.ModelSend(MethodBase method, ContentHeaderBase header, Byte[] body)
   na RabbitMQ.Client.Impl.ModelBase.BasicPublish(výměna řetězců, String routingKey, Booleovské povinnosti, IBasicProperties basicProperties, Byte[] body)
   na RabbitMQ.Client.Impl.ModelBase.BasicPublish(Výměna řetězců, String routingKey, IBasicProperties basicProperties, Byte[] body)
   Na rabbitMQ_Publish.Form1.button1_Click(Object sender, EventArgs e) pozice C:\project\my\RabbitMQ-demo\rabbitMQ-Publish\Form1.cs: řádek číslo 37
   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)
   V System.Windows.Forms.Control.PreProcessMessage(Message& msg)
   V System.Windows.Forms.Control.PreProcessControlMessageInternal(Control target, Message& msg)
   Na System.Windows.Forms.Application.ThreadContext.PreTranslateMessage(MSG& msg)





Jak tedy může být abnormálně obnoven? Nebo je odpojený a znovu připojený?

Zdrojový kód klienta RabbitMQ NET Client, podle výzkumu jedenAutomaticRecoveryEnabled = pravdaTady je, jak ho používat


Konkrétní mechanismus obnovy je následující

1. Když je AutoRecoveringConnection inicializován, přidejte zpracování odpojení do delegáta události uzavření spojení


Podívejte se na volání BeginAutomaticRecovery a uvidíte, že metoda PerformAutomaticRecovery je vyvolána interně. Podívejme se přímo na obsah této metody, z nichž první je metoda RecoverConnectionDelegate



Volací signál v této metodě je:

Jak vidíte, vykonává mrtvou smyčku, dokud se spojení znovu neotevře, a samozřejmě, pokud narazí na výjimku, zavolá Thread.Sleep, aby chvíli počkala, a pak znovu provede obnovu spojení.




Předchozí:Úvod do tří výměnných režimů (fanout, přímý a tematický) v RabbitMQ
Další:Naučí vás, jak si nastavit vlastní DNS server!
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com