Azure Event Grid MQTT Aracısı'nda paylaşılan aboneliklere genel bakış

Azure Event Grid MQTT Aracısı'ndaki Shared abonelikleri birden çok istemcinin tek bir konu aboneliğindeki iletileri grup olarak kullanmasına olanak tanıyan ve aracının iletileri istemciler arasında yük dengeli bir şekilde dağıtmasına olanak tanıyan bir messaging desenidir. Her abone her iletiyi almak yerine, paylaşılan grup içindeki yalnızca bir istemci her iletiyi alır ve arka uç işleme sistemleri için ölçeklenebilirliği ve aktarım hızını artırır.

Paylaşılan abonelikler nasıl çalışır?

Standart bir MQTT aboneliğinde, abone olunan her istemci her iletinin bir kopyasını alır. Paylaşılan aboneliklerde aracı, bir istemci grubunu tek bir mantıksal abone olarak ele alır ve iletileri bunlar arasında dağıtır.

  • Paylaşılan filtreyle eşleşen her uygulama iletisi, grupta yalnızca bir etkin oturuma teslim edilir
  • Dağıtım genellikle grup içinde rastgele bir şekilde yük dengelidir
  • İstemci oturumu aynı anda hem paylaşılan hem de paylaşımsız abonelikler içerebilir
  • Birden çok grup aynı konuya bağımsız olarak abone olabilir

Paylaşılan abonelik konusu biçimi

Paylaşılan abonelikler aşağıdaki biçimi kullanır:

$share/{group-name}/{topic-filter}

Bileşen:

  • $share → Paylaşılan aboneliği tanımlar
  • {group-name} → Mantıksal tüketici grubu
  • {topic-filter} → Konu başlığı veya joker karakter aboneliği

Örnek:

$share/order-processors/retail/orders/#

Temel özellikler

  • Yük dengeli tüketim: verimli işleme sağlamak için iletiler aynı gruptaki istemciler arasında dağıtılır.
  • Yatay ölçeklenebilirlik: Tüketiciler, yayımcıları etkilemeden ölçeği bağımsız olarak genişletebilir.
  • Bağımsız tüketici grupları: Birden çok paylaşılan grup, içsel dengeleme yaparken aynı iletileri bağımsız olarak alır.
  • Karma abonelik desteği: İstemci aynı oturumda hem paylaşılan hem de paylaşılmayan abonelikleri koruyabilir.

Örnek senaryo: Perakende sipariş işleme

Event Grid MQTT Aracısı kullanarak perakende sipariş işleme senaryolarını göz önünde bulundurun:

  • Konu: retail/orders
  • Paylaşılan grup: order-workers
  • İstemciler: Worker1, Worker2, Worker3

Akışı:

  1. Siparişler şu şekilde yayımlanır: retail/orders
  2. Tüm çalışanlar abone olur: $share/order-workers/retail/orders
  3. Event Grid MQTT Aracısı dağıtır:
    • Sipariş 1 → Çalışan1
    • Sipariş 2 → Çalışan 2
    • Sipariş 3 → Çalışan3

Sistem yatay olarak ölçeklendirilirken her sipariş bir kez işlenir.

Paylaşılan abonelik grubu sipariş çalışanlarını kullanarak üç perakende siparişi üç çalışana dağıtan Event Grid MQTT Aracısı diyagramı.

Protokol davranışı ve kısıtlamaları

MQTT sürüm desteği

  • Yalnızca MQTT 5 özelliği
  • MQTT 3.1.1 istemcileri $share/... denemeye çalıştığında bağlantısı kesilecektir.

İleti teslim semantiği

  • Her ileti, grup başına bir istemciye teslim edilir
  • Teslimat, en az bir kez semantiğini (QoS 1) izler.

İleti sıralama

  • Grup üyeleri arasında katı sipariş garantisi yok

Oturum davranışı

  • Oturum süresinin sona ermesi mesaj teslimini etkiler.
    • İstemcinin bağlantısı kesilirse ve oturumun süresi dolarsa iletiler yeniden atanabilir
    • Kalıcı oturumlar güvenilirliği artırır

Event Grid MQTT Aracısı'ndaki kullanım örnekleri

Paylaşılan abonelikler şunlar için idealdir:

  • Yüksek aktarım hızına sahip IoT telemetrisi işleme: Telemetriyi veya olayları birden çok işleme hizmeti arasında dağıtma.
  • Arka uç çalışan havuzları / mikro hizmetler: Durum bilgisi olmayan hizmetlerin, olayları yinelenmeden işlemesini etkinleştirin.
  • Birleşik Ad Alanı (UNS) tüketicileri: Yüksek aktarım hızına sahip endüstriyel veri akışlarını verimli bir şekilde kullanın.

Paylaşılan abonelikler ne zaman kullanılır?

Aşağıdaki durumlarda paylaşılan abonelikleri kullanın:

  • Paralel ileti işlemeye ihtiyacınız vardır.
  • Tek bir tüketici yükü kaldıramaz.
  • Ölçeklenebilir ve dayanıklı mimariler istiyorsunuz.
  • Özel yük dengeleme oluşturmaktan kaçınmak istiyorsunuz.

Bir konunun paralel işleme için iletileri birden çok tüketici arasında dağıttığı paylaşılan aboneliği gösteren diyagram.