Tämä artikkeli on konekäännöksen peiliartikkeli, klikkaa tästä siirtyäksesi alkuperäiseen artikkeliin.

Näkymä: 24043|Vastaus: 0

[WinForm] .net/c# RabbitMQ-yhteyden katkaisu - katkaisu ja uudelleenyhdistäminen

[Kopioi linkki]
Julkaistu 29.3.2018 16.30.04 | | | |
Rabbitmq:n antama virallinen NET-kuluttajakoodi on seuraava, mutta käyttöprosessin aikana kohtaat yhteyden katkeamisen ongelman; kun yhteys katkeaa, tämä koodi raportoi virheen, joka saa kuluttajat tai tuottajat lopettamaan puhelun.

Seuraavassa kuvassa tuottaja lähettää viestin, pysäytin rabbitmq:n manuaalisesti ja käynnistin rabbitmq:n uudelleen, luultavasti käynnistyksen jälkeen odotin vielä 10 sekuntia estääkseni palvelun käynnistymisen kokonaan

Kun palvelu on täysin käynnistynyt, yritän lähettää joitakin virheviestejä uudelleen seuraavasti:

Epätavallinen teksti **************
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=
   RabbitMQ.Client.Impl.SessionBase.Transmit(Command cmd) -muodossa
   osoitteessa RabbitMQ.Client.Impl.ModelBase.ModelSend(MethodBase-metodi, ContentHeaderBase-otsikko, tavu[] runko)
   osoitteessa RabbitMQ.Client.Impl.ModelBase.BasicPublish (Merkkijonojen vaihto, String routingKey, Boolean mandatory, IBasicProperties basicProperties, Byte[] body)
   osoitteessa RabbitMQ.Client.Impl.ModelBase.BasicPublish (merkkijonojen vaihto, merkkijonojen reititysavain, IBasicProperties basicProperties, tavu[] runko)
   Osoitteessa rabbitMQ_Publish.Form1.button1_Click(Object sender, EventArgs e) sijainti C:\project\my\RabbitMQ-demo\rabbitMQ-Publish\Form1.cs: rivinumero 37
   In System.Windows.Forms.Control.OnClick(EventArgs e)
   System.Windows.Forms.Button.OnClick(EventArgs e)
   In System.Windows.Forms.Button.PerformClick()
   osoitteessa System.Windows.Forms.Form.ProcessDialogKey(Keys keyData)
   osoitteessa System.Windows.Forms.TextBoxBase.ProcessDialogKey(Keys keyData)
   System.Windows.Forms.Control.PreProcessMessage(Message&msg)
   System.Windows.Forms.Control.PreProcessControlMessageInternal(Control target, Message&msg)
   Osoitteessa System.Windows.Forms.Application.ThreadContext.PreTranslateMessage(MSG&msg)





Miten se sitten voidaan toiputtaa epänormaalisti? Vai onko se irrotettu ja kytketty uudestaan?

RabbitMQ NET Clientin lähdekoodi, tutkimuksessa löydettiin yksiAutomaticRecoveryEnabled = trueNäin sitä käytetään


Erityinen palautusmekanismi on seuraava

1. Kun AutoRecoveringConnection on alustettu, lisää yhteyden katkaisun käsittely linkin sulkemistapahtuman delegaattiin


Seuraa BeginAutomaticRecovery-kutsua, niin näet, että PerformAutomaticRecovery-metodi kutsutaan sisäisesti. Katsotaanpa suoraan tämän metodin sisältöä, joista ensimmäinen on menetelmä RecoverConnectionDelegate



Tämän menetelmän kutsu on:

Kuten näet, se suorittaa kuolleen silmukan, kunnes yhteys avautuu uudelleen, ja tietysti, jos se kohtaa poikkeuksen, se kutsuu Thread.Sleepin odottamaan hetken ja suorittaa sitten yhteyden palautuksen uudelleen.




Edellinen:Johdanto RabbitMQ:n kolmeen vaihtotilaan (fanout, suora ja aihe)
Seuraava:Opetan sinulle, miten perustaa oma DNS-palvelin!
Vastuuvapauslauseke:
Kaikki Code Farmer Networkin julkaisemat ohjelmistot, ohjelmamateriaalit tai artikkelit ovat tarkoitettu vain oppimis- ja tutkimustarkoituksiin; Yllä mainittua sisältöä ei saa käyttää kaupallisiin tai laittomiin tarkoituksiin, muuten käyttäjät joutuvat kantamaan kaikki seuraukset. Tämän sivuston tiedot ovat peräisin internetistä, eikä tekijänoikeuskiistat liity tähän sivustoon. Sinun tulee poistaa yllä oleva sisältö kokonaan tietokoneeltasi 24 tunnin kuluessa lataamisesta. Jos pidät ohjelmasta, tue aitoa ohjelmistoa, osta rekisteröityminen ja hanki parempia aitoja palveluita. Jos rikkomuksia ilmenee, ota meihin yhteyttä sähköpostitse.

Mail To:help@itsvse.com