Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 24043|Yanıt: 0

[WinForm] .net/c# RabbitMQ bağlantı kopması - bağlantı kesme ve yeniden bağlantı

[Bağlantıyı kopyala]
Yayınlandı 29.03.2018 16:30:04 | | | |
Rabbitmq tarafından verilen resmi NET tüketici örnek kodu şöyledir, ancak kullanım sürecinde bağlantı kopma sorunuyla karşılaşırsınız; bağlantı kesildiğinde bu kod bir hata bildirir ve bu da tüketicilerin veya üreticilerin telefonu kapatmasına neden olur.

Aşağıdaki fotoğraf üreticinin mesaj gönderdiğini gösteriyor, ben rabbitmq'yu manuel olarak durdurdum ve sonra rabbitmq'yu yeniden başlattım, muhtemelen başlatma başarılı olduktan sonra, hizmetin tamamen başlamasını engellemek için 10 saniye daha bekledim

Hizmet tamamen başladıktan sonra, hatalı bazı mesajları şu şekilde yeniden göndermeye çalışıyorum:

Alışılmadık Metin **************
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) içinde
   at RabbitMQ.Client.Impl.ModelBase.ModelSend(MethodBase metodu, ContentHeaderBase başlığı, Bayt[] gövde)
   at RabbitMQ.Client.Impl.ModelBase.BasicPublish (String exchange, String routingKey, Boolean zorunlu, IBasicProperties basicProperties, Byte[] body)
   at RabbitMQ.Client.Impl.ModelBase.BasicPublish (String exchange, String routingKey, IBasicProperties basicProperties, Byte[] body)
   rabbitMQ_Publish.Form1.button1_Click(Nesne göndericisi, EventArgs e) konumunda C:\project\my\RabbitMQ-demo\rabbitMQ-Publish\Form1.cs: satır numarası 37
   In System.Windows.Forms.Control.OnClick(EventArgs e)
   In System.Windows.Forms.Button.OnClick(EventArgs e)
   System.Windows.Forms.Button.PerformClick() içinde
   at System.Windows.Forms.Form.ProcessDialogKey(Keys keyData)
   at System.Windows.Forms.TextBoxBase.ProcessDialogKey(Keys keyData)
   In System.Windows.Forms.Control.PreProcessMessage(Message&msg)
   In System.Windows.Forms.Control.PreProcessControlMessageInternal(Control target, Message&msg)
   System.Windows.Forms.Application.ThreadContext.PreTranslateMessage(MSG&msg) adresinde





Peki anormal şekilde nasıl iyileşebilir? Yoksa bağlantı kesilip yeniden bağlanıyor mu?

RabbitMQ NET Client kaynak kodu, araştırma bir tane bulduAutomaticRecoveryEnabled = doğruİşte nasıl kullanılacağı


Özel iyileşme mekanizması şöyledir

1. AutoRecoveringConnection başlatıldığında, bağlantı kapatma olay delegesine bağlantı koparma işlemi ekleyin


BeginAutomaticRecovery çağrısını izleyin, PerformAutomaticRecovery yönteminin dahili çağrıldığını görebilirsiniz. Bu yöntemin içeriğine doğrudan bakalım; ilki RecoverConnectionDelegate yöntemidir



Bu yöntemdeki çağrı şudur:

Gördüğünüz gibi, bağlantı yeniden açılana kadar ölü bir döngü çalıştırıyor ve tabii ki bir istisna karşılaştığında Thread.Sleep'i çağırıp bir süre bekleyip sonra tekrar bağlantı kurtarma işlemi gerçekleştiriyor.




Önceki:RabbitMQ'nun üç değişim moduna (fanout, direct ve topic) giriş
Önümüzdeki:Kendi DNS sunucunuzu nasıl kuracağınızı öğretecekler!
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com