|
|
Postitatud 29.03.2018 16:30:04
|
|
|
|

Rabbitmq poolt antud ametlik NET tarbija näidiskood on järgmine, kuid kasutusprotsessi käigus tekib ühenduse katkestamise probleem; pärast ühenduse katkestamist teatab see kood vea, mis põhjustab tarbijate või tootjate kõne katkestamise.
Järgmine pilt näitab, kuidas produtsent saadab sõnumi, ma peatasin rabbitmq käsitsi ja taaskäivitasin rabbitmq, tõenäoliselt pärast edukat käivitamist, ootasin veel 10 sekundit, et takistada teenuse täielikku käivitamist
Kui teenus on täielikult käivitatud, proovin saata mõningaid vigadega sõnumeid uuesti järgmiselt:
Ebatavaline tekst **************
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) aadressil RabbitMQ.Client.Impl.ModelBase.ModelSend(MethodBase meetod, ContentHeaderBase päis, Bait[] keha) aadressil RabbitMQ.Client.Impl.ModelBase.BasicPublish (string exchange, string routingKey, Boolean mandatory, IBasicProperties basicProperties, Byte[] body) aadressil RabbitMQ.Client.Impl.ModelBase.BasicPublish (stringivahetus, stringi routingKey, IBasicProperties basicProperties, Bait[] keha) Aadressil rabbitMQ_Publish.Form1.button1_Click(Objekti saatja, EventArgs e) asukoht C:\project\my\RabbitMQ-demo\rabbitMQ-Publish\Form1.cs: rida number 37 In System.Windows.Forms.Control.OnClick(EventArgs e) System.Windows.Forms.Button.OnClick(EventArgs e) In System.Windows.Forms.Button.PerformClick() at System.Windows.Forms.Form.ProcessDialogKey(Keys keyData) aadressil System.Windows.Forms.TextBoxBase.ProcessDialogKey(Keys keyData) System.Windows.Forms.Control.PreProcessMessage(Message& msg) System.Windows.Forms.Control.PreProcessControlMessageInternal(Control target, Message&msg) Aadressil System.Windows.Forms.Application.ThreadContext.PreTranslateMessage(MSG& msg)
Kuidas saab seda siis ebanormaalselt taastada? Või on see lahti ühendatud ja uuesti ühendatud?
RabbitMQ NET Clienti lähtekood, uurimus leidis üheAutomaticRecoveryEnabled = tõeneSiin on, kuidas seda kasutada
Spetsiifiline taastumismehhanism on järgmine
1. Kui AutoRecoveringConnection on initsialiseerunud, lisa ühenduse katkestamise käsitlemine lingi sulgemise sündmuse delegaadile
Vaadake BeginAutomaticRecovery kutset ja näete, et PerformAutomaticRecovery meetod kutsutakse sisemiselt. Vaatame otse selle meetodi sisu, millest esimene on meetod RecoverConnectionDelegate
Selle meetodi kutsung on:
Nagu näha, käivitab see surnud tsükli kuni ühenduse taasavamiseni, ja loomulikult, kui tekib erand, kutsub ta Thread.Sleepi, et oodata, ja seejärel sooritab ühenduse taastamise uuesti.
|
Eelmine:Sissejuhatus RabbitMQ kolme vahetusrežiimi (fanout, otse ja teema) kohtaJärgmine:Õpetan sulle, kuidas oma DNS-serverit seadistada!
|