Share via


Azure Event Grid'in MQTT aracı özelliği tarafından desteklenen MQTT özellikleri

MQTT, kısıtlanmış ortamlar için tasarlanmış bir yayımlama-abone olma mesajlaşma aktarım protokolüdür. Verimli, ölçeklenebilir ve güvenilirdir ve bu da IoT senaryolarında iletişim için altın standart haline getirmektedir. MQTT aracısı WebSockets üzerinden MQTT v3.1.1, MQTT v3.1.1 ve WebSockets üzerinden MQTT v5 ve MQTT v5 üzerinden ileti yayımlayan ve abone olan istemcileri destekler. MQTT aracısı ayrıca çapraz MQTT sürümü (MQTT 3.1.1 ve MQTT 5) iletişimlerini de destekler.

MQTT v5, daha sorunsuz, şeffaf ve verimli bir iletişim sağlamak için MQTT v3.1.1 üzerinde birçok geliştirme yaptı. Eklendi:

  • Daha iyi hata raporlama.
  • Kullanıcı özellikleri ve içerik türü gibi özellikler aracılığıyla daha saydam iletişim istemcileri.
  • İleti ve oturum süre sonu gibi özellikler aracılığıyla istemcilere iletişim üzerinde daha fazla denetim.
  • İstek-yanıt deseni gibi standart önemli desenler.

Bağlan akışı:

MQTT istemcilerinizin TLS 1.2 veya TLS 1.3 üzerinden bağlanması gerekir . Bu adımı atlama girişimleri bağlantıyla başarısız olur.

MQTT aracısına bağlanırken, MQTT üzerinden iletişim sırasında aşağıdaki bağlantı noktalarını kullanın:

  • TCP bağlantı noktası 8883 üzerinde MQTT v3.1.1 ve MQTT v5
  • 443 numaralı TCP bağlantı noktasında WebSocket üzerinden MQTT v3.1.1 ve WebSocket üzerinden MQTTv5.

CONNECT paketi aşağıdaki özellikleri içermelidir:

  • ClientId alanı gereklidir ve istemcinin oturum adını içermelidir. Oturum adının ad alanı genelinde benzersiz olması gerekir. Her istemci istemci başına bir oturum kullanıyorsa, oturum adı olarak istemci kimlik doğrulama adını kullanabilirsiniz. Bir istemci birden çok oturum kullanıyorsa, oturumlarının her biri için ClientId için farklı değerler kullanması gerekir.
  • Ad alanı oluşturma sırasında alternativeAuthenticationNameSources içinde bir değer seçmediyseniz Kullanıcı Adı alanı gereklidir. Bu durumda, kullanıcı adı alanında istemcinizin kimlik doğrulama adını sağlamanız gerekir. Bu adın, sağlanan kimlik doğrulama adıyla ve istemcinin sertifika alanındaki istemci kaynağı oluşturma sırasında belirtilen değerle eşleşmesi gerekir.

İstemci kimlik doğrulaması hakkında daha fazla bilgi edinin.

Çoklu oturum desteği

Çoklu oturum desteği, aynı anda birden çok etkin oturumla MQTT aracısına bağlanarak uygulamanızın MQTT istemcilerinin daha ölçeklenebilir ve güvenilir bir uygulamaya sahip olmasını sağlar.

Ad alanı yapılandırması

Bu özelliği kullanmadan önce, ad alanını istemci başına birden çok oturuma izin verecek şekilde yapılandırmanız gerekir. Azure portalında istemci başına birden çok oturum yapılandırmak için aşağıdaki adımları kullanın:

  • Azure portalında ad alanınıza gidin.
  • Yapılandırma'nın altında, Kimlik doğrulama adı başına en fazla istemci oturumu sayısı değerini, istemci başına istenen oturum sayısıyla değiştirin.
  • Uygula'yı seçin.

Not

Azure CLI yapılandırması için ad alanı yükündeki MaxClientSessionsPerAuthenticationName özelliğini istenen değerle güncelleştirin.

Bağlan akışı:

Her oturum için CONNECT paketleri aşağıdaki özellikleri içermelidir:

  • İstemci kimlik doğrulama adınızı imzalamak için CONNECT paketinde Username özelliğini sağlayın.
  • Her Kullanıcı Adı için ClientID için bir veya daha fazla değer olması gibi oturum adını imzalamak için CONNECT paketinde ClientID özelliğini sağlayın.

Örneğin, CONNECT paketindeki aşağıdaki Kullanıcı Adı ve ClientId bileşimleri, "Mgmt-application" istemcisinin üç bağımsız oturum üzerinden MQTT aracısına bağlanmasına olanak tanır:

  • İlk Oturum:
    • Kullanıcı adı: Mgmt-application
    • ClientId: Mgmt-Session1
  • İkinci Oturum:
    • Kullanıcı adı: Mgmt-application
    • ClientId: Mgmt-Session2
  • Üçüncü Oturum:
    • Kullanıcı adı: Mgmt-application
    • ClientId: Mgmt-Session3

Çok oturumlu bir örneğin diyagramı.

Daha fazla bilgi için bkz . Tek bir istemci için birden çok oturum oluşturma.

Oturumları işleme:

  • İstemci, oturum adını farklı bir kimlik doğrulama adıyla sunarak başka bir istemcinin etkin oturumunu devralmaya çalışırsa, bağlantı isteği yetkisiz bir hatayla reddedilir. Örneğin, İstemci B, A istemcisi için o sırada atanmış olan 123. oturuma bağlanmayı denerse, B istemcisinin bağlantı isteği reddedilir. Bununla birlikte, aynı istemci aynı oturum adları ve aynı kimlik doğrulama adıyla yeniden bağlanmayı denerse mevcut oturumunu devralır.
  • İstemci kaynağı oturumu sonlandırılmadan silinirse, oturum süresi dolana kadar diğer istemciler oturum adını kullanamaz. Örneğin, B istemcisi oturum adı 123 olan bir oturum oluşturursa, B istemcisi silinir, A istemcisi süresi dolana kadar 123. oturuma bağlanamaz.
  • İstemci başına oturum sayısı sınırı, herhangi bir zamanda çevrimiçi ve çevrimdışı oturumlar için geçerlidir. Örneğin, kimlik doğrulama adı başına en fazla istemci oturumunun 1 olarak ayarlandığı bir ad alanı düşünün. A istemcisi kalıcı bir oturuma bağlanırsa 123 bağlantısı kesilirse, A istemcisi çevrimdışı olsa bile 123 oturumu hala etkin olduğundan yeni bir 456 oturumuyla bağlantı kuramaz. Buna göre, her yeniden bağlantıyla yeni bir oturum adı oluşturmak yerine, aynı istemcinin her zaman aynı statik oturum adlarıyla yeniden bağlanmasını öneririz.

MQTT özellikleri

Azure Event Grid'in MQTT aracı özelliği aşağıdaki MQTT özelliklerini destekler:

Hizmet kalitesi (QoS)

MQTT aracısı, istemciler ve MQTT aracısı arasında PUBLISH ve SUBSCRIBE paketlerinde ileti teslim garantisi tanımlayan QoS 0 ve 1'i destekler. QoS 0, en çok bir kez teslim garantisi verir; QoS 0 içeren iletiler abone tarafından kabul edilmez veya yayımcı tarafından yeniden iletilmez. QoS 1 en az bir kez teslim garantisi verir; iletileri abone tarafından kabul edilir ve kabul edilmezse yayımcı tarafından yeniden iletilir. QoS, istemcilerinizin iletişimin verimliliğini ve güvenilirliğini denetlemesini sağlar.

Kalıcı oturumlar

MQTT aracısı MQTT v3.1.1 için, MQTT aracısı iletişimin güvenilirliğini sağlamak için bağlantı kesilmesi durumunda istemcinin oturumu hakkındaki bilgileri koruyacak şekilde kalıcı oturumları destekler. Bu bilgiler istemcinin aboneliklerini ve yanıtsız/tanınmayan QoS 1 iletilerini içerir. İstemciler, CONNECT paketindeki cleanSession bayrağını false olarak ayarlayarak kalıcı bir oturum yapılandırabilir.

Temiz başlangıç ve oturum süre sonu

MQTT v5, oturum kalıcılığını işlemede MQTT v3.1.1'e göre bir iyileştirme olarak temiz başlangıç ve oturum süre sonu özelliklerini kullanıma sunar. Temiz Başlangıç, istemcinin önceki oturum verilerini atarak MQTT aracısı ile yeni bir oturum başlatmasına olanak tanıyan bir özelliktir. Oturum Süre Sonu, etkin olmayan bir oturumun süresi dolduğu ve otomatik olarak kaldırıldığı kabul edildiğinde istemcinin MQTT aracısını bilgilendirmesine olanak tanır. CONNECT paketinde bir istemci, güvenlik nedeniyle veya önceki oturum sırasında meydana gelebilecek olası veri çakışmalarını önlemek için Temiz Başlangıç bayrağını doğru ve/veya kısa oturum süre sonu aralığı olarak ayarlayabilir. İstemci ayrıca kalıcı oturumların güvenilirliğini ve verimliliğini sağlamak için yanlış ve/veya uzun oturum süre sonu aralığına temiz bir başlangıç ayarlayabilir.

En fazla oturum süre sonu aralığı yapılandırması

Event Grid ad alanına bağlanan tüm istemcileriniz için izin verilen en uzun oturum süre sonu aralığını yapılandırabilirsiniz. MQTT v3.1.1 istemcileri için, yapılandırılan sınır tüm kalıcı oturumlar için varsayılan oturum süre sonu aralığı olarak uygulanır. MQTT v5 istemcileri için yapılandırılan sınır, CONNECT paketindeki Oturum Süre Sonu Aralığı özelliğinin en yüksek değeri olarak uygulanır; sınırı aşan tüm değerler ayarlanır. Bu ad alanı özelliği için varsayılan değer 1 saattir ve 8 saate kadar uzatılabilir. Azure portalında en fazla oturum süre sonu aralığını yapılandırmak için aşağıdaki adımları kullanın:

  • Azure portalında ad alanınıza gidin.
  • Yapılandırma'nın altında, Saat cinsinden En fazla oturum süre sonu aralığı değerini istediğiniz sınıra değiştirin.
  • Uygula’yı seçin.

en fazla oturum süre sonu aralığı yapılandırmasının ekran görüntüsü.

Oturum taşması

MQTT aracısı, istemci kuyruktaki iletileri almak için MQTT aracısı ile yeniden bağlanana kadar bağlı olmayan her etkin MQTT oturumu için bir ileti kuyruğu tutar. İstemci kuyruğa alınan QOS1 iletilerini almak için bağlanmazsa, oturum kuyruğu 100 ileti veya 1 MB sınırına ulaşana kadar iletileri birikmeye başlar. Kuyruk, oturumun kullanım ömrü boyunca sınırına ulaştığında oturum sonlandırılır.

Son Will and Testament (LWT) iletileri (önizleme)

Last Will and Testament (LWT), MQTT istemcilerinize diğer MQTT istemcilerinin ani bağlantı kesilmesini bildirir. Beklenmeyen bağlantı kesilmeleri sırasında MQTT istemcileri arasında öngörülebilir ve güvenilir iletişim akışı sağlamak için LWT kullanabilirsiniz. Bu, gerçek zamanlı iletişim, sistem güvenilirliği ve eşgüdümlü eylemlerin kritik öneme sahip olduğu senaryolar için değerlidir. Karmaşık görevleri gerçekleştirmek için işbirliği yapan istemciler, davranışlarını ayarlayarak, görevleri yeniden dağıtarak veya sistemin performans ve kararlılığını korumak için belirli sorumlulukları üstlenerek birbirlerinden gelen LWT iletilerine tepki verebilir. LWT'yi kullanmak için istemci, bağlantı sırasında CONNECT paketindeki will iletisini, will konusunu ve will özelliklerinin geri kalanını belirtebilir. İstemci aniden bağlantısını kestiğinde, MQTT aracısı will iletisini will konusuna abone olan tüm istemcilere yayımlar.

Kullanıcı özellikleri

MQTT aracısı, ileti hakkında daha fazla bağlam sağlamak için ileti üst bilgisine özel anahtar-değer çiftleri eklemenize olanak sağlayan MQTT v5 PUBLISH paketlerindeki kullanıcı özelliklerini destekler. Kullanıcı özellikleri için kullanım örnekleri çok yönlü. Alıcının yükü ayrıştırmadan iletiyi işleyebilmesi ve bilgi işlem kaynaklarını kaydetmesi için iletinin amacını veya kaynağını eklemek için bu özelliği kullanabilirsiniz. Örneğin, amacını "uyarı" olarak belirten bir kullanıcı özelliğine sahip bir ileti, "bilgi" amacıyla birden farklı işleme mantığını tetikleyebilir.

İstek-yanıt düzeni

MQTTv5, MQTT PUBLISH paket üst bilgisinde istek-yanıt düzenindeki yanıt iletisi için bağlam sağlayan alanlar kullanıma sunulmuştur. Bu alanlar, yanıtlayanın önceden yapılandırma yapmadan yanıtta kullanabileceği bir yanıt konusu ve bağıntı kimliği içerir. Yanıt bilgileri, komut ve denetim senaryolarında kullanılan standart istek-yanıt düzeni için daha verimli iletişim sağlar.

İstek-yanıt deseni örneğinin diyagramı.

İleti süre sonu aralığı:

MQTT v5'te, ileti süre sonu aralığı iletilerin yapılandırılabilir bir kullanım ömrüne sahip olmasını sağlar. İleti süre sonu aralığı, bir iletinin MQTT aracısına yayımlanma zamanı ile MQTT aracısının teslim edilmemiş iletiyi atması gereken zaman arasındaki zaman aralığı olarak tanımlanır. Bu özellik, iletilerin zamana duyarlı komutlar, gerçek zamanlı veri akışı veya güvenlik uyarıları gibi yalnızca belirli bir süre boyunca geçerli olduğu senaryolarda kullanışlıdır. MQTT aracısı, bir ileti süre sonu aralığı ayarlayarak süresi geçmiş iletileri otomatik olarak kaldırabilir ve yalnızca ilgili bilgilerin aboneler tarafından kullanılabilmesini sağlayabilir. İletinin süre sonu aralığı sıfır olarak ayarlanırsa iletinin süresi hiçbir zaman dolmamalıdır.

Konu diğer adları:

MQTT v5'te konu diğer adları, istemcinin yayımlanan iletideki tam konu adı yerine daha kısa bir diğer ad kullanmasına olanak sağlar. MQTT aracısı, konu diğer adıyla gerçek konu adı arasında bir eşleme tutar. Bu özellik, özellikle uzun adlara sahip konular için ağ bant genişliğini kaydedebilir ve ileti üst bilgisinin boyutunu küçültebilir. Aynı konunun algılayıcı ağlarında olduğu gibi birden çok iletide tekrar tekrar yayımlandığı senaryolarda kullanışlıdır. MQTT aracısı en fazla 10 konu diğer adını destekler. İstemci, PUBLISH paketindeki Konu Diğer Adı alanını kullanarak tam konu adını ilgili diğer adla değiştirebilir.

Konu diğer adı örneğinin diyagramı.

Akış denetimi

MQTT v5'te akış denetimi, bir istemcinin işleyebileceği iletilerin hızını ve boyutunu yönetme mekanizmasını ifade eder. Akış denetimi, CONNECT paketinde Maksimum Paket Boyutu ve Alma Maksimum parametreleri ayarlanarak yapılandırılabilir. Receive Maximum parametresi, istemcinin aracı tarafından gönderilen ileti sayısını istemcinin işleyebileceği ileti sayısıyla sınırlamasına olanak tanır. En Büyük Paket Boyutu parametresi, istemcinin alabileceği en büyük paket boyutunu tanımlar. MQTT aracısının ileti boyutu sınırı 512 KiB'dir. Bu özellik, sınırlı işlem hızı veya depolama özelliklerine sahip kısıtlanmış cihazlar için iletişimin güvenilirliğini ve kararlılığını sağlar.

Negatif bildirimler ve sunucu tarafından başlatılan bağlantı kesme paketi

MQTT v5 için MQTT aracısı, istemciye ileti teslimi veya bağlantı hataları hakkında daha fazla bilgi sağlayan negatif bildirimler (NAK'lar) ve sunucu tarafından başlatılan bağlantı kesme paketleri gönderebilir. Bu özellikler, istemcinin bir hatanın ardındaki nedeni tanılamasını ve uygun azaltma eylemlerini gerçekleştirmesine yardımcı olur. MQTT aracısı, MQTT v5 Belirtiminde tanımlanan neden kodlarını kullanır.

Geçerli sınırlamalar

MQTT aracısı, MQTT belirtimleriyle daha fazla uyumlu hale getirmek için gelecekte daha fazla MQTT v5 ve MQTT v3.1.1 özelliği ekliyor. Aşağıdaki listede, MQTT aracısı tarafından desteklenen özellikler ile MQTT belirtimleri arasındaki geçerli farklar ayrıntılı olarak yer alır:

MQTTv5 güncel sınırlamaları

MQTT v5 şu anda MQTT v5 Belirtiminden aşağıdaki yollarla farklıdır:

  • Paylaşılan Abonelikler henüz desteklenmiyor.
  • Koru bayrağı henüz desteklenmiyor.
  • Will gecikme aralığı henüz desteklenmiyor.
  • En fazla QoS 1'dir.
  • Maksimum Paket Boyutu 512 KiB'dir
  • İleti sıralama garanti değildir.
  • Abonelik Tanımlayıcıları desteklenmez.
  • Atanan İstemci Tanımlayıcıları henüz desteklenmiyor.
  • Konu Diğer Adı Üst Sınırı 10'dur. Sunucu şu anda giden iletiler için hiçbir konu diğer adı atamaz. İstemciler, belirlenen sınır içinde konu diğer adlarını atayabilir ve kullanabilir.
  • CONNACK, CONNECT isteği İstek Yanıt Bilgileri özelliği içerse bile Yanıt Bilgileri özelliğini döndürmez.
  • CONNECT, SUBSCRIBE, DISCONNECT, PUBACK, AUTH paketlerinde Kullanıcı Özellikleri hizmet tarafından kullanılmadığından desteklenmez. Bu isteklerden herhangi biri kullanıcı özelliklerine sahipse istek başarısız olur.
  • Sunucu, başarılı olmayan yanıt koduna sahip bir istemciden PUBACK alırsa, bağlantı sonlandırılır.
  • Canlı Tut Maksimum 1.160 saniyedir.

MQTTv3.1.1 geçerli sınırlamaları

MQTT v5 şu anda MQTT v3.1.1 Belirtiminden aşağıdaki yollarla farklıdır:

  • QoS2 ve Bayrağı Koru henüz desteklenmiyor. Tutma bayrağı veya QoS2 içeren yayımlama isteği başarısız olur ve bağlantıyı kapatır.
  • İleti sıralama garanti değildir.
  • Canlı Tut Maksimum 1.160 saniyedir.

Kod örnekleri:

Bu depo telemetri göndermeyi, komut göndermeyi ve uyarı yayınlamayı gösteren C#, C ve python kod örneklerini içerir. Örnekler aracılığıyla oluşturulan sertifikalar test için uygundur, ancak üretim ortamlarına uygun değildir.

Sonraki adımlar:

MQTT hakkında daha fazla bilgi edinin:

MQTT aracısı hakkında daha fazla bilgi edinin: