Publisher-Subscriber düzeni

Bir uygulamanın, gönderenlerle alıcıları eşlemeden etkinlikleri ilgi duyan birden çok tüketiciye zaman uyumsuz bir şekilde duyurmasını sağlayın.

Olarak daadlandırılan: Pub/sub mesajlaşması

Bağlam ve sorun

Bulut tabanlı ve dağıtılmış uygulamalarda, sistem bileşenlerinin genellikle olaylar olurken diğer bileşenlere bilgi sağlamaları gerekir.

Zaman uyumsuz mesajlaşma, gönderenleri tüketicilerden uzak durmanın ve gönderenin yanıt beklemesini engellemenin etkili bir yolu değildir. Ancak, her tüketici için ayrılmış bir ileti kuyruğu kullanmak birçok tüketiciye etkili bir şekilde ölçeklendirmez. Ayrıca, bazı tüketiciler bilgilerin yalnızca bir alt kümesiyle ilgileniyor olabilir. Gönderen, kimliklerini bilmeden tüm ilgili tüketicilere olayları nasıl duyurur?

Çözüm

Şunları içeren zaman uyumsuz bir mesajlaşma alt sistemi tanıtma:

  • Gönderen tarafından kullanılan bir giriş mesajlaşma kanalı. Gönderen, bilinen bir ileti biçimini kullanarak olayları iletilere paketler ve bu iletileri giriş kanalı üzerinden gönderir. Bu desende gönderene yayımcı da denir.

    Not

    İleti, bir veri paketidir. Olay, diğer bileşenlere yapılan bir değişiklik veya eylem hakkında bilgi veren bir iletidir.

  • Tüketici başına bir çıkış mesajlaşma kanalı. Tüketiciler abone olarak bilinir.

  • Bu iletiyle ilgilenen tüm aboneler için giriş kanalından çıkış kanallarına her iletiyi kopyalama mekanizması. Bu işlem genellikle ileti aracısı veya olay veri verisi gibi bir aracı tarafından işleme alır.

Aşağıdaki diyagram bu desenin mantıksal bileşenlerini gösterir:

İleti aracısı kullanarak yayımlama-abone olma düzeni

Pub/sub mesajlaşmanın aşağıdaki avantajları vardır:

  • Yine de iletişim kurması gereken alt sistemlerin bir şekilde ayrılar. Alt sistemler bağımsız olarak yönetilebilir ve bir veya daha fazla alıcı çevrimdışı olsa bile iletiler düzgün yönetilebilir.

  • Ölçeklenebilirliği artırır ve gönderenin yanıt hızını artırır. Gönderen, giriş kanalına hızla tek bir ileti gönderebilir ve ardından temel işleme sorumluluklarına geri dönebilirsiniz. İleti altyapısı, iletilerin ilgili abonelere teslimi sağlamakla sorumludur.

  • Güvenilirliği artırır. Zaman uyumsuz mesajlaşma, uygulamaların artan yükler altında sorunsuz bir şekilde çalışmaya ve aralıklı hataları daha verimli bir şekilde işlemeye yardımcı olur.

  • Ertelenmiş veya zamanlanmış işlemeye olanak sağlar. Aboneler yoğun olmayan saatlerde iletileri almak için bekleyebilir veya iletiler belirli bir zaman çizelgesine göre yönlendirlenebilir veya işlenebilir.

  • Farklı platformları, programlama dillerini veya iletişim protokollerini kullanarak sistemler arasında ve bulutta çalışan şirket içi sistemler ile uygulamalar arasında daha basit tümleştirme sağlar.

  • Kuruluş genelinde zaman uyumsuz iş akışlarını kolaylaştırır.

  • Test lanabilirliği artırır. Kanallar izlenir ve iletiler genel tümleştirme testi stratejisinin bir parçası olarak incelenir veya günlüğe kaydedilir.

  • Uygulamalarınız için endişelerin ayrımını sağlar. Her uygulama temel özelliklerine odaklanırken, mesajlaşma altyapısı iletileri birden çok tüketiciye güvenilir bir şekilde yönlendiren her şeyi ele almaktadır.

Sorunlar ve dikkat edilmesi gerekenler

Bu düzenin nasıl uygulanacağına karar verirken aşağıdaki noktaları göz önünde bulundurun:

  • Mevcut teknolojiler. Kendi mesajlaşmanızı değil yayımlama-abone olma modelini destekleyen kullanılabilir mesajlaşma ürünlerinin ve hizmetlerinin kullanılması önemle önerilir. Azure'da , Service Busveya Event Hubs kullanmayı Event Grid. Pub/sub mesajlaşması için kullanılmaktadır diğer teknolojiler Redis, RabbitMQ ve Apache Kafka.

  • Abonelik işleme. Mesajlaşma altyapısı, tüketicilerin kullanılabilir kanallara abone olmak veya mevcut kanallardan aboneliklerini iptal etmek için kullanabileceği mekanizmalar sağlamaktadır.

  • Güvenlik'i seçin. Yetkisiz kullanıcılar veya uygulamalar tarafından izinsiz dinlemeyi önlemek için herhangi bir ileti kanalına bağlanma güvenlik ilkesiyle kısıtlanmış olması gerekir.

  • İleti alt kümeleri. Aboneler genellikle yalnızca bir yayımcı tarafından dağıtılan iletilerin alt kümesiyle ilgilenir. Mesajlaşma hizmetleri genellikle abonelerin aşağıdakiler tarafından alınan ileti dizilerini daraltmasına olanak sağlar:

    • Konu. Her konunun ayrılmış bir çıkış kanalı vardır ve her tüketici tüm ilgili konulara abone olabilir.
    • İçerik filtreleme. İletiler inceler ve her iletinin içeriğine göre dağıtılır. Her abone ilgilendiği içeriği belirtebilirsiniz.
  • Joker karakter aboneleri. Abonelerin joker karakterler aracılığıyla birden çok konuya abone olmalarına izin verme.

  • Çift yönlü iletişim. Yayımla-abone ol sistemi içinde yer alan kanallar tek yönlü olarak kabul edilir. Belirli bir abonenin bildirim göndermesi veya durumu yayımcıya geri göndermesi gerekirse İstek/Yanıt Desenini kullanmayı göz önünde bulundurabilirsiniz. Bu düzen, aboneye ileti göndermek için bir kanal ve yayımcıyla geri iletişim kurmak için ayrı bir yanıt kanalı kullanır.

  • Mesaj sıralama. Tüketici örneklerinin iletileri alma sırası garanti edilemez ve her zaman iletilerin oluşturulma sırasıyla aynı değildir. İleti işleme sırasına bağımlılığı ortadan kaldırmaya yardımcı olmak için sistemi, ileti işlemenin her zaman aynı olduğundan emin olacak şekilde tasarla.

  • İleti önceliği. Bazı çözümler iletilerin belirli bir sırada işlenmesini gerekli olabilir. Öncelik Sırası düzeni, belirli iletilerin diğerlerine teslimi için bir mekanizma sağlar.

  • Zehirli iletiler. Hatalı biçimlendirilmiş bir ileti veya kullanılabilir durumda olmayan kaynaklara erişim gerektiren bir görev, bir hizmet örneğinin başarısız olmasına yol açabilir. Sistem bu tür iletilerin kuyruğa döndürül engellemesi gerekir. Bunun yerine, gerekirse analiz etmek için bu iletilerin ayrıntılarını yakalayıp başka bir yerde depolar.

  • Yinelenen iletiler. Aynı ileti birden çok kez gönderebilirsiniz. Örneğin, gönderen bir ileti gönderdikten sonra başarısız olabilir. Daha sonra gönderenin yeni bir örneği başlat ve iletiyi yinele. İleti altyapısı, iletilerin en çok bir kez teslimi sağlamak için ileti kimliklerine bağlı olarak yinelenen ileti algılama ve kaldırma (aynı zamanda yinelenenleri kaldırma olarak da bilinir) uygulamalı.

  • İleti süre sonu. İletinin ömrü sınırlı olabilir. Bu süre içinde işlenmezse, artık ilgili olmayacaktır ve atılmalıdır. Gönderici, iletide yer alan verilerin bir parçası olarak süre sonu belirtebilirsiniz. Alıcı, iletiyle ilişkili iş mantığını gerçekleştirip gerçekleştirmey karar vermeden önce bu bilgileri inceler.

  • İleti zamanlama. İleti geçici olarak ambargoya alınmış olabilir ve belirli bir tarih ve saat kadar işlenmez. İleti bu zamana kadar alıcı tarafından kullanılabilir durumda olmayacak.

Bu düzenin kullanılacağı durumlar

Bu düzeni aşağıdaki durumlarda kullanın:

  • Bir uygulamanın önemli sayıda tüketiciye bilgi yayınlaması gerekir.

  • Bir uygulamanın, farklı platformlar, programlama dilleri ve iletişim protokolleri kullanabiliyor, bağımsız olarak geliştirilmiş bir veya daha fazla uygulama veya hizmetle iletişim kurması gerekir.

  • Bir uygulama, tüketicilerden gerçek zamanlı yanıtlar almadan tüketicilere bilgi gönderebilir.

  • Tümleştirilen sistemler, verileri için nihai tutarlılık modelini destekleyecek şekilde tasarlanmıştır.

  • Bir uygulamanın, gönderenden farklı kullanılabilirlik gereksinimlerine veya çalışma süresi zamanlamalarına sahip olan birden çok tüketiciye bilgi iletlaması gerekir.

Bu düzen aşağıdaki durumlarda kullanışlı olmayabilir:

  • Bir uygulamanın, üretim uygulamasından önemli ölçüde farklı bilgilere ihtiyacı olan yalnızca birkaç tüketicisi vardır.

  • Bir uygulama, tüketicilerle gerçek zamanlıya yakın etkileşim gerektirir.

Örnek

aşağıdaki diyagramda, iş akışlarını koordine etmek için Service Bus kullanan bir kurumsal tümleştirme mimarisi gösterilmektedir ve oluşan olayların alt sistemlerine bildirimde Event Grid. daha fazla bilgi için bkz. ileti kuyruklarını ve olayları kullanarak Azure 'da Enterprise tümleştirme.

Enterprise tümleştirme mimarisi

Sonraki adımlar

Bu düzenin uygulanması sırasında aşağıdaki kılavuz uygun olabilir:

Bu düzeni uygularken aşağıdaki desenler ilgili olabilir:

  • Gözlemci stili. Publish-Subscribe, gözlemci, zaman uyumsuz mesajlaşma aracılığıyla gözlemcilerin 'daki konuları ayırarak gözlemci düzeniyle oluşturulur.

  • Ileti Aracısı stili. Bir yayınla-abone modelini destekleyen birçok mesajlaşma alt sistemi bir ileti Aracısı aracılığıyla uygulanır.