Azure Event Grid MQTT aracısı tarafından desteklenen MQTT özellikleri

Message Queuing Telemetri Aktarımı (MQTT), kısıtlanmış ortamlar için tasarlanmış bir yayımlama-abone olma ileti aktarım protokolüdür. MQTT verimli, ölçeklenebilir ve güvenilirdir ve bu da Nesnelerin İnterneti (IoT) senaryolarında iletişim için popüler olmasını sağlar. MQTT aracısı, MQTT v3.1.1, WebSocket üzerinden MQTT v3.1.1, MQTT v5 ve WebSocket üzerinden MQTT v5 iletilerini yayımlayan ve abone olan istemcileri destekler. MQTT aracısı, MQTT sürümleri (MQTT 3.1.1 ve MQTT 5) arasında iletişimi de destekler.

Azure Event Grid'deki MQTT aracısı, HTTPS üzerinden MQTT iletileri gönderen cihazları ve hizmetleri de destekleyerek MQTT olmayan istemcilerle tümleştirmeyi kolaylaştırır. Event Grid, diğer kullanım örnekleriyle birlikte veri analizi, depolama ve görselleştirmeler için buluta MQTT iletileri göndermenizi sağlar. Bu özellik şu anda önizleme aşamasındadır.

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 istemcilerle daha şeffaf iletişim.
  • İ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ğlantı akışı

MQTT istemcilerinizin Aktarım Katmanı Güvenliği (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ğlandığınızda, 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 MQTT v5

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

  • Bu 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 farklı değerler kullanması gerekir.
  • Namespace oluşturma sırasında Username içinde bir değer seçmediyseniz, alternativeAuthenticationNameSources alanı gereklidir. Bu durumda, alanda istemcinizin kimlik doğrulama adını Username 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 şu adımları izleyin:

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

Not

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

Bağlantı akışı

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

  • CLIENT kimlik doğrulama adınızı göstermek için CONNECT paketinde Username özelliğini belirtin.
  • ClientID Her kullanıcı adı için istemci kimliği için bir veya daha fazla değer olması gibi oturum adını imzalamak için CONNECT paketinde özelliğini sağlayın.

Örneğin, CONNECT paketindeki aşağıdaki Username ve ClientId birleşimleri, istemcinin Mgmt-application üç bağımsız oturum üzerinden MQTT aracısına bağlanmasını sağlar.

  • İlk oturum:
    • Username: Mgmt-application
    • ClientId: Mgmt-Session1
  • İkinci oturum:
    • Username: Mgmt-application
    • ClientId: Mgmt-Session2
  • Üçüncü oturum:
    • Username: Mgmt-application
    • ClientId: Mgmt-Session3

Çok oturumlu örneği gösteren diyagram.

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

Oturumları yönetme

  • İ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, B istemcisi A istemcisi için o sırada atanan 123 . oturuma bağlanmaya çalışırsa, B istemcisinin bağlantı isteği reddedilir. Ancak, aynı istemci aynı oturum adları ve aynı kimlik doğrulama adıyla yeniden bağlanmayı denerse, mevcut oturumunu devralabilir.
  • İ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 ve ardından B istemcisi silinirse, 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 oturum 123 ile bağlanır ve ardından bağlantısı kesilir. A istemcisi, 123 oturumu çevrimdışı olsa bile hala etkin olduğundan yeni bir 456 oturumuyla bağlanamıyor. 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

Event Grid MQTT aracısı aşağıdaki MQTT özelliklerini destekler.

Hizmet Kalitesi

MQTT aracısı, istemciler ile MQTT aracısı arasındaki PUBLISH ve SUBSCRIBE paketlerinde ileti teslim garantisi tanımlayan Hizmet Kalitesi (QoS) düzey 0 ve 1'i destekler.

  • QoS 0, en çok bir kez teslimi garanti eder: Abone QoS 0 içeren iletileri kabul etmez ve yayımcı bunları yeniden iletmez.
  • QoS 1 en az bir kez teslimi garanti eder: Abone iletileri kabul eder ve yayımcı kabul edilmedikleri takdirde iletileri yeniden iletir.

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 kalıcı oturumları destekler, böylece MQTT aracısı iletişimin güvenilirliğini sağlamak için bağlantısı kesildiğinde istemcinin oturumu hakkındaki bilgileri korur. Bu bilgiler istemcinin aboneliklerini ve yanıtsız veya bilinmeyen QoS 1 iletilerini içerir. İstemciler, CONNECT paketindeki cleanSession bayrağını olarak falseayarlayarak 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 attıktan sonra MQTT aracısı ile yeni bir oturum başlatmasına olanak tanır. Oturum süre sonu, etkin olmayan bir oturumun süresinin dolduğu ve otomatik olarak kaldırıldığı kabul edildiğinde istemcinin MQTT aracısını bilgilendirmesine olanak tanır.

CONNECT paketinde, bir istemci bayrağını Clean Start olarak trueayarlayabilir. İstemci, güvenlik nedeniyle veya önceki oturum sırasında meydana gelebilecek olası veri çakışmalarını önlemek için kısa oturum süre sonu aralığı da ayarlayabilir. İstemci, kalıcı oturumların güvenilirliğini Clean Start ve verimliliğini sağlamak için bayrağı false olarak veya uzun bir oturum süre sonu aralığı olarak da ayarlayabilir.

Maksimum oturum zamanaşımı 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ği için en yüksek değer 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 bir saattir ve sekiz saate kadar uzayabilir. Azure portalında en fazla oturum süre sonu aralığını yapılandırmak için şu adımları izleyin:

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

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

Oturum aşımı

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

Vasiyet ve Son İstekler iletileri

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 özellik 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 diğer Will özelliklerini belirtebilir. İstemci aniden bağlantısını kestiğinde, MQTT aracısı Will iletisini Will konusuna abone olan tüm istemcilere yayımlar. Dalgalı bağlantı kesilmelerinden kaynaklanan gürültüyü azaltmak için istemci gecikme aralığını sıfırdan büyük bir değere ayarlayabilir. Bu durumda, istemci ani bir şekilde bağlantıyı keserse ancak gecikme aralığı dolmadan önce bağlantıyı geri yüklerse, Will iletisi yayımlanmaz.

Kullanıcı özellikleri

MQTT aracısı, ileti hakkında daha fazla bağlam sağlamak üzere ileti üst bilgisine özel anahtar/değer çiftleri eklemek için kullanabileceğiniz 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 için iletinin amacını veya kaynağını dahil etmek için bu özelliği kullanabilirsiniz ve bu da bilgi işlem kaynaklarından tasarruf sağlar. Örneğin, amacını "uyarı" olarak gösteren bir kullanıcı özelliğine sahip bir ileti, "bilgi" amacıyla birden farklı işleme mantığını tetikleyebilir.

İstek-yanıt düzeni

MQTT v5, MQTT PUBLISH paket üst bilgisinde, istek-yanıt düzenindeki yanıt iletisi için bağlam sağlayan alanlar tanıttı. 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ı desen örneğini gösteren diyagram.

İleti süre sonu aralığı

MQTT v5'te iletinin 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ımlandığı zaman ile aracısı teslim edilmemiş iletiyi atması gereken süre 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 belirli bir süre boyunca geçerli olduğu senaryolarda kullanışlıdır. bir ileti süre sonu aralığı ayarlayarak, MQTT aracısı güncel olmayan iletileri otomatik olarak kaldırabilir. Bu adım yalnızca ilgili bilgilerin aboneler tarafından kullanılabilmesini sağlar. İ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 başlık takma adını destekler. İstemci, PUBLISH paketindeki bir Topic Alias alanı kullanarak tam konu adını ilgili diğer adla değiştirebilir.

Konu takma adı örneğini gösteren 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ış denetimini yapılandırmak için, CONNECT paketindeki Maximum Packet Size ve Receive Maximum parametrelerini ayarlayın. 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. parametresi, Maximum Packet Size istemcinin alabileceği en büyük paket boyutunu tanımlar. MQTT aracısı 512 KiB ileti boyutu sınırına sahiptir. 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 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.

İleti sıralama

MQTT v5, QoS düzey 1 kullanıldığında her konu ve istemci içinde sıralı ileti teslimi sağlar. Bu, sıra bütünlüğü gerektiren iş akışları için çok önemlidir. Telemetri, komut yürütme ve zaman serisi verileri gibi senaryolar için idealdir.

Ancak, farklı konularda veya farklı QoS düzeylerinde iletiler gönderildiğinde sıralamayı garanti etmez. Daha fazla bilgi edinmek için adresinden askmqtt@microsoft.combizimle iletişime geçin.

Atanan istemci tanımlayıcıları

MQTT v5, istemcinin sağlamadığı durumlarda MQTT broker'ının benzersiz bir istemci kimliği oluşturup döndürebilmesine olanak tanıyan atanmış istemci tanımlayıcıları desteği sunar. Bu özellik için MQTT aracısı desteği, sorunsuz istemci ekleme sağlar ve istemcilerin kendi tanımlayıcılarını yönetme gereksinimini azaltır. Özellikle istemci sağlamanın dinamik olduğu veya cihazların önceden yapılandırılmış kimliği olmadığı senaryolarda kullanışlıdır. Atanan istemci kimlikleri CONNACK yanıtından alınabilir ve tutarlı tanımlamayı korumak için gelecekteki oturumlar için yeniden kullanılabilir.

MQTT'de istemci tanımlayıcısını ve oturum sınırlarını yönetme

  • Atanan istemci tanımlayıcıları, istemcilerin önceden tanımlanmış tanımlayıcılar belirtmeden bağlanmasına olanak tanıyarak geçici veya kalıcı oturumları etkinleştirir.
  • İstemciler, ilk bağlantı sırasında kısa oturum süre sonu aralıkları kullanarak ve atanan istemci tanımlayıcısını gelecekte kullanmak üzere kaydederek kilitlenmekten kaçınabilir.
  • Üretici yazılımı güncelleştirmeleri veya sıfırlamaları için istemciler bilinen istemci tanımlayıcılarını tutmalı veya uzun süreli kilitlemeleri önlemek için mütevazı oturum süre sonu aralıklarını kullanmalıdır.
  • Ad alanı yapılandırması, güncelleştirmeler veya geri almalar sırasında kesintileri en aza indirmek için istemci başına oturum sınırlarını artırabilir.

Paylaşılan abonelikler

MQTT'deki paylaşılan abonelikler, birden çok istemcinin tek bir konu aboneliğindeki iletileri grup olarak kullanmasına olanak tanıyarak aracının iletileri yük dengeli bir şekilde dağıtmasını sağlar. Her abonenin her iletiyi alması yerine iş yükü paylaşılır; her ileti gruptaki tek bir istemciye teslim edilir. Bu düzen özellikle arka uç işlemeyi ölçeklendirmek, aktarım hızını geliştirmek ve telemetri işleme, sipariş işleme veya olay temelli mikro hizmetler gibi senaryolarda yüksek kullanılabilirlik sağlamak için kullanışlıdır. Azure Event Grid MQTT Aracısı'nda paylaşılan abonelikler, karmaşık özel yük dengeleme mantığı gerektirmeden dayanıklı, yatay olarak ölçeklenebilir tüketici uygulamaları oluşturmaya yardımcı olur.

Abonelik tanımlayıcıları

Azure Event Grid MQTT Aracısı'nda (MQTT 5) Ubscription tanımlayıcıları istemcinin her aboneliğe benzersiz bir sayısal kimlik atamasına izin verir, böylece gelen iletiler doğru abonelikle kolayca ilişkilendirilebilir. Aracı bir ileti teslim ettiğinde, eşleşen aboneliklerin tanımlayıcılarını içerir; bu da istemcinin, özellikle birden çok veya çakışan konu filtresini işlerken, iletileri verimli bir şekilde yönlendirip işlemesini sağlar.

Abonelik tanımlayıcıları neden önemlidir?

  • İleti bağlamını temizleme: İletiyi tetikleyen aboneliği anında öğrenme
  • Basitleştirilmiş mantık: İstemci tarafında karmaşık konu eşleştirmelerinden kaçının
  • Verimli işleme: İletileri hızla doğru işleyiciye veya iş akışına yönlendirme

Akıllı ev izleme örneği

İki istemci uygulamasının bir evden farklı veri türlerini izlediğini düşünün:

  • Abonelik Kimliği 1 → home/livingroom/temperature
  • Abonelik Kimliği 2 → home/+/humidity

Konu dizesi eşleştirmesi yerine abonelik kimliklerini kullanarak istemci uygulamalarına MQTT aracı yönlendirme sıcaklığını ve nem algılayıcı iletilerini gösteren diyagram.

Broker tarafından, home/livingroom/temperature için yayımlanan bir ileti Abonelik Kimliği: 1 ile teslim edilir. 'a home/kitchen/humidity yayımlanan bir ileti Abonelik Kimliği: 2 ile teslim edilir.

gibi home/livingroom/temperaturekonu dizelerini denetlemek yerine istemci şunları kullanabilir:

  • Kimlik 1 → İşlem sıcaklık verileri
  • Kimlik 2 → Nem verilerini işlem

Bu, uygulama mantığını daha temiz, daha hızlı ve bakımı daha kolay hale getirir.

Geçerli sınırlamalar

MQTT aracısı gelecekte MQTT belirtimleriyle daha fazla uyumlu hale getirmek için 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.

MQTT v5 geçerli sınırlamaları

MQTT v5 desteği şu anda MQTT v5 belirtiminden aşağıdaki yollarla farklıdır:

  • Etkili gecikme aralığı, sağlanan Gecikme Süresi veya oturumun sona erme süresi aralığından (varsa) daha küçük olanıdır.
  • En fazla QoS 1'dir.
  • Maksimum paket boyutu 512 KiB'dir.
  • Konu takma adının maksimumu 10'dur. Sunucu şu anda giden iletiler için hiçbir konu diğer adı atamaz. Müşteriler, ayarlanan sınır içinde konu alias'larını atayabilir ve kullanabilir.
  • CONNECT isteği Response Information özelliğini içerse bile CONNACK Request Response Information özelliğini döndürmez.
  • CONNECT, SUBSCRIBE, DISCONNECT, PUBACK ve AUTH paketlerinde kullanıcı özellikleri hizmet tarafından kullanılmaz, bu nedenle desteklenmez. Bu isteklerden herhangi biri kullanıcı özelliklerine sahipse istek başarısız olur.
  • Sunucu başarısız yanıt koduna sahip bir istemciden PUBACK paketi alırsa, bağlantı sonlandırılır.
  • Keep Alive maksimum 1,160 saniyedir.

MQTT v3.1.1 geçerli sınırlamaları

MQTT aracısı şu anda MQTT v3.1.1 belirtiminden aşağıdaki yollarla farklıdır:

  • QoS 2 desteklenmez. Bir RETAIN bayrağı veya QoS 2 ile birlikte bir yayın isteği başarısız olur ve bağlantıyı kapatır.
  • Keep Alive maksimum 1,160 saniyedir.

Kod örnekleri

Bu depo telemetri göndermeyi, komut göndermeyi ve uyarıları yayımlamayı 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.

MQTT hakkında daha fazla bilgi edinmek için bkz. MQTT v5 belirtimi. MQTT aracısı hakkında daha fazla bilgi edinmek için bkz: