WCF'den NserviceBus'a geçiş yapmalı mıyım


13

Çeşitli konumlardaki istemci ağlarında bulunan bir dizi bilgisayardan mesaj gönderen ve alan merkezi bir sunucumuz var. Bunu kolaylaştırmak için, şu anda TCPNetBindings ile WCF kullanıyorum, sertifikalarla korunan dubleks iletişim kullanıyorum.

Şimdi, bununla ilgili bir takım sorunlarımız var - esas olarak "bağlantısız modu" desteklememiz isteniyor (hataya dayanıklı olmamız gerekiyor). Bildiğim kadarıyla, WCF yığınını kullanarak bunu yapmanın basit bir yolu yoktur - bir şey uygulamamız ve belki de msmq kullanmamız gerekir. Son zamanlarda NServiceBus'a bakıyordum ve faturaya iyi uyduğunu görebiliyorum - hata toleransı, mesajlar basit bir http ağ geçidi aracılığıyla internet üzerinden gönderilebilir, vb. Neden ona baktığımı görebiliyorum.

Yani, sorum şu: NServiceBus'u kullanmak mantıklı bir fikir gibi mi geliyor, yoksa bununla ilgili başka önerileri / gerçek dünya deneyimleri olan var mı? Sanırım nispeten az bildiğim yeni bir teknolojiyi tanıtmaktan ve onu güvence altına almak, her şeyi güvenilir bir şekilde kurmak, yol boyunca ilerlemek gibi sorunlarla karşılaşmaktan endişe duyuyorum. "mimariyi kaplamak ve parlak bir şey seçmek, WCF ile yapışmak ve sadece benim için çalışmasını sağlamak yerine beni uygulamada boğacak.

Teşekkürler!


1
> "bağlantı kesik modu" desteği (hataya dayanıklı olmamız gerekir) Hala istemci tarafında hata toleransı oluşturmak zorunda kalmayacak mısınız? MSMQ'nun sunucudaki hata toleransı, bir sorun durumunda durumu geri yüklemek için mükemmeldir, ancak yine de ne seçerseniz seçin, istemcide büyük bir baş ağrısı olduğunu görüyorum.
brian

1
Desteklemem gereken şey, istemcinin sunucuya bir mesaj göndereceği ve sunucunun sonunda alacağı "garantidir" - yani çevrimdışıysak oraya gelene kadar denemeye devam etmeliyiz. Bir WCF çözümü olarak (sanırım) kod gerektirecektir NSB "ücretsiz" yaptığı budur ..
Matt Roberts

Kısmen Brian'a katılıyorum. MSMQ, son sürümlerde düzgün bir şekilde yapılandırılmışsa, kuyruğu ve iletiyi bu şekilde davranacak şekilde yapılandırdığınız sürece kutunun dışında oldukça iyi bağlantısız mod sağlar. İstemci, yerel giden kuyruktaki iletileri saklayabilir ve sunucu uzak bir kuyrukta yeniden kullanılabilir olduğunda yeniden gönderebilir.
Bill

WCF'nin MSMQ bağları var ... Bunu kullanan birkaç büyük ölçekli başarılı uygulama hakkında çok bilgim var. Bununla birlikte, nServiceBus'u da seviyorum, ama farklı bir şey yapıyor.
Kyle Hodgson

Yanıtlar:


12

Benim önerim, bu konuda hızlı olmanız ve sadece WCF ile dayanıklı (bağlantısız) çalışmayı kolaylaştırmak için basit bir şeye ihtiyacınız varsa, WCF - MSMQ bağlarına bakmaktır. Daha geniş bir ortamda bir şeye ihtiyacınız varsa nServiceBus'a bakın.

Aklımda, nServiceBus daha geniş bir dağılmış ortamda parlamaya başlayacaktı. Örneğin, aşağıdaki örneği ele alalım (bu, WCF ile yeryüzünde cehennem olur, ancak nServiceBus ile basittir):

  • Uygulama sunucusu katmanı, önbellek sunucusu katmanı, salt okunur veritabanı katmanı, okuma / yazma veritabanı katmanından oluşan altyapı
  • Müşteri yeni bir giriş gönderdiğinde, bu katmanların bir kerede güncellenmesini gerçekten istersiniz
  • WCF'de, her katman düzeyinde ayrı hizmetler sunmanız ve istemcinin hepsine göndermesini sağlamanız gerekir (veya aynı şeyi sizin için aynı şeyi yapması gerekir)
  • NServiceBus'ta her katmanın bu bilgilere abone olmanız gerekir ve müşteri bunu bir kez yayınlar, böylece servis veriyolunun geri kalanıyla ilgilenmesini sağlar

WCF'de MSMQ Bağlamaları var

Bununla birlikte, çoğunlukla WCF ile yapışmanız gerekiyorsa (kısa zaman çizelgeleri, diğer WCF özelliklerine ihtiyacınız var), MSDN'deki bu makaleye göz atmanızı öneririm . MSMQ için WCF bağlarının nasıl kullanılacağını ve bir hizmetin HTTP'den MSMQ'ya nasıl geçirileceğini gösterir. Yol boyunca size bu senaryo ile ilgili bazı sorunları (ve bu sorunlara faydalı çözümleri) gösterir.

Bu önerilerin her ikisi de MSMQ'dan yoğun bir şekilde yararlanır, bu nedenle bununla ilgili bir not: Apache MQ, RabbitMQ ve diğer popüler kuyruk sistemlerinin aksine, MSMQ tipik bir aracı tabanlı kuyruk mimarisi değildir, bunun yerine dağıtılmış bir kuyruktur. Bu, WCF istemciniz, kuyruğu barındıran uzak sunucuya bağlanamadığında bir MSMQ aktarımı üzerinden bir ileti gönderirse, istemci makine bunun yerine yerel olarak "Giden Kuyruk" olarak adlandırılan iletide enqueque olacağı anlamına gelir. İleti, istemcinin MSMQ hizmeti uzak MSMQ hizmetine yeniden bağlanabileceğini algılayana kadar güvenli bir şekilde kalacaktır. Bu noktada, mesaj istemciden son hedefe akacaktır.

Yukarıdakilere en az bir uyarı verilir - uzak sunucu çok uzun süre çevrimdışıysa (MSMQ için belgelerinizi kontrol edin) istemci vazgeçer ve mesajı giden harften çıkmaz kuyruğa taşır. Ölü harf kuyruğuna aktarılan iletiler otomatik olarak yeniden gönderilemez, yeniden oluşturulmaları gerekir.

Şifrelemeye ihtiyacınız varsa ve ActiveDirectory yoksa, bu blog girişinde Sergey Sorokin, MSMQ'nun Active Directory olmadan WCF kullanarak iletişimini şifrelemek için gerekli adımları detaylandırır.


7

1 değiştirme için 1 değil - çoğu zaman bir WCF uç noktasına mesaj göndermek veya WCF uç noktasından mesaj almak için NServiceBus'u kullanırsınız.

Her durumda, bunun gibi bağlantısız mod senaryolarını yönetmek, mesaj kuyruklarının gerçekten, gerçekten parladığı yerdir. NServiceBus başlamak için iyi bir yerdir. Orada başka seçenekler de var. Birçoğunun MSMQ'yu günün sonunda sardığını not edeceğim - MSMQ çok sağlam bir arka uç ve erişilebilir olduğunda muhtemelen kullanmaya değer.


Teşekkürler. Alınan nokta, her ne kadar benim durumumda 1: 1 değiştirme olarak görüyorum, çünkü WCF haberleşmelerimin çoğu bu adetler ve sunucu arasındaki iletişimi desteklemek için orada - nsb benim için tüm bunlarla ilgileniyor gibi görünüyor, bu yüzden bir takas -Benim için.
Matt Roberts

Yakaladım, o zaman senin için oldukça iyi çalışmalı.
Wyatt Barnett
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.