Šis raksts ir mašīntulkošanas spoguļraksts, lūdzu, noklikšķiniet šeit, lai pārietu uz oriģinālo rakstu.

Skats: 24043|Atbildi: 0

[WinForm] .net/c# RabbitMQ savienojuma atvienošana - atvienošana un atkārtota pieslēgšana

[Kopēt saiti]
Publicēts 29.03.2018 16:30:04 | | | |
Oficiālais NET patērētāja parauga kods, ko sniedz Rabbitmq, ir šāds, bet lietošanas procesa laikā jūs saskarsieties ar savienojuma atvienošanas problēmu, pēc atvienošanas šis kods ziņos par kļūdu, kas izraisīs patērētāju vai ražotāju uzkarināšanos.

Nākamajā attēlā redzams, ka ražotājs nosūta ziņojumu, es manuāli apturēju rabbitmq un pēc tam restartēju rabbitmq, iespējams, pēc veiksmīga starta, es gaidīju vēl 10 sekundes, lai novērstu pakalpojuma pilnīgu sākšanu

Pēc tam, kad pakalpojums ir pilnībā startēts, es mēģinu atkārtoti nosūtīt dažus ziņojumus ar kļūdām šādi:

Neparasta teksta **************
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=
   TrusīMQ.Client.Impl.SessionBase.Transmit(Komanda cmd)
   at RabbitMQ.Client.Impl.ModelBase.ModelSend(MethodBase metode, ContentHeaderBase galvene, Byte[] body)
   at RabbitMQ.Client.Impl.ModelBase.BasicPublish(String exchange, String routingKey, Būla obligāts, IBasicProperties basicProperties, Byte[] body)
   at RabbitMQ.Client.Impl.ModelBase.BasicPublish(String exchange, String routingKey, IBasicProperties basicProperties, Byte[] body)
   Pie rabbitMQ_Publish.Form1.button1_Click(Objekta sūtītājs, EventArgs e) pozīcija C:\project\my\RabbitMQ-demo\rabbitMQ-Publish\Form1.cs: rindas numurs 37
   Sistēmā System.Windows.Forms.Control.OnClick(EventArgs e)
   Sistēmā System.Windows.Forms.Button.OnClick(EventArgs e)
   Sistēmā System.Windows.Forms.Button.PerformClick()
   vietnē System.Windows.Forms.Form.ProcessDialogKey(Keys keyData)
   vietnē System.Windows.Forms.TextBoxBase.ProcessDialogKey(Keys keyData)
   Sistēmā System.Windows.Forms.Control.PreProcessMessage(Ziņojums& msg)
   Sistēmā System.Windows.Forms.Control.PreProcessControlMessageInternal(Vadības mērķis, Ziņojums un ziņojums)
   Vietnē System.Windows.Forms.Application.ThreadContext.PreTranslateMessage(MSG& msg)





Tātad, kā to var nenormāli atgūt? Vai arī tas ir atvienots un atkal savienots?

RabbitMQ NET Client avota kods, pētījumā tika atrasts viensAutomaticRecoveryEnabled = patiessLūk, kā to izmantot


Īpašs atgūšanas mehānisms ir šāds

1. Kad AutoRecoveringConnection ir inicializēts, pievienojiet atvienošanas apstrādi saites aizvēršanas notikuma pārstāvim


Ievērojiet BeginAutomaticRecovery izsaukumu, un jūs varat redzēt, ka PerformAutomaticRecovery metode tiek izsaukta iekšēji. Apskatīsim tieši šīs metodes saturu, no kuriem pirmais ir metode RecoverConnectionDelegate



Šīs metodes izsaukums ir:

Kā redzat, tas izpilda mirušo cilpu, līdz savienojums atkal tiek atvērts, un, protams, ja tas saskaras ar izņēmumu, tas izsauc Thread.Sleep, lai pagaidītu kādu laiku, un pēc tam atkal veic savienojuma atgūšanu.




Iepriekšējo:Ievads trīs RabbitMQ apmaiņas režīmos (fanout, tiešais un tēma)
Nākamo:Iemāciet jums iestatīt savu DNS serveri!
Atruna:
Visa programmatūra, programmēšanas materiāli vai raksti, ko publicē Code Farmer Network, ir paredzēti tikai mācību un pētniecības mērķiem; Iepriekš minēto saturu nedrīkst izmantot komerciāliem vai nelikumīgiem mērķiem, pretējā gadījumā lietotājiem ir jāuzņemas visas sekas. Informācija šajā vietnē nāk no interneta, un autortiesību strīdiem nav nekāda sakara ar šo vietni. Iepriekš minētais saturs ir pilnībā jāizdzēš no datora 24 stundu laikā pēc lejupielādes. Ja jums patīk programma, lūdzu, atbalstiet oriģinālu programmatūru, iegādājieties reģistrāciju un iegūstiet labākus oriģinālus pakalpojumus. Ja ir kādi pārkāpumi, lūdzu, sazinieties ar mums pa e-pastu.

Mail To:help@itsvse.com