Sdílet prostřednictvím


Funkce MQTT podporované zprostředkovatelem Azure Event Grid MQTT

Přenos telemetrie služby Řízení front zpráv (MQTT) je transportní protokol pro publikování a odběr zpráv, který byl navržen pro omezená prostředí. MQTT je efektivní, škálovatelná a spolehlivá, díky čemuž je oblíbená pro komunikaci ve scénářích Internetu věcí (IoT). Zprostředkovatel MQTT podporuje klienty, kteří publikují a odebírat zprávy přes MQTT v3.1.1, MQTT v3.1.1 přes WebSocket, MQTT v5 a MQTT v5 přes WebSocket. Zprostředkovatel MQTT také podporuje komunikaci mezi verzemi MQTT (MQTT 3.1.1 a MQTT 5).

Zprostředkovatel MQTT ve službě Azure Event Grid podporuje také zařízení a služby odesílající zprávy MQTT přes PROTOKOL HTTPS, což zjednodušuje integraci s klienty bez MQTT. Event Grid umožňuje odesílat zprávy MQTT do cloudu pro analýzu dat, úložiště a vizualizace mimo jiné případy použití. Tato funkce je aktuálně dostupná jako ukázková verze.

MQTT v5 zavedl mnoho vylepšení oproti MQTT v3.1.1, která poskytují plynulejší, transparentní a efektivnější komunikaci. Přidalo se:

  • Lepší zasílání zpráv o chybách
  • Transparentnější komunikace s klienty prostřednictvím funkcí, jako jsou vlastnosti uživatele a typ obsahu.
  • Větší kontrolu nad komunikací klientů prostřednictvím funkcí, jako jsou zprávy a vypršení platnosti relace.
  • Standardní důležité vzory, jako je model odpovědi na požadavek.

Tok připojení

Klienti MQTT se musí připojit přes protokol TLS (Transport Layer Security) 1.2 nebo TLS 1.3. Pokusy o přeskočení tohoto kroku selžou s připojením.

Když se připojíte ke zprostředkovateli MQTT, během komunikace přes MQTT použijte následující porty:

  • MQTT v3.1.1 a MQTT v5 na portu TCP 8883
  • MQTT v3.1.1 přes WebSocket a MQTT v5 přes WebSocket na portu TCP 443

Paket CONNECT by měl obsahovat následující vlastnosti:

  • Pole ClientId je povinné a mělo by obsahovat název relace klienta. Název relace musí být jedinečný v rámci oboru názvů. Název ověřování klienta můžete použít jako název relace, pokud každý klient používá jednu relaci na klienta. Pokud jeden klient používá více relací, musí pro každou z jejích relací použít různé hodnoty ClientId .
  • Pole Username je povinné, pokud jste při vytváření oboru názvů nevybrali hodnotu alternativeAuthenticationNameSources . V takovém případě musíte do Username pole zadat ověřovací název klienta. Tento název musí odpovídat zadanému ověřovacímu názvu a hodnotě v poli certifikátu klienta, které bylo zadáno během vytváření prostředku klienta.

Přečtěte si další informace o ověřování klientů.

Podpora více relací

Podpora více relací umožňuje klientům MQTT vaší aplikace mít škálovatelnou a spolehlivější implementaci připojením k zprostředkovateli MQTT s více aktivními relacemi najednou.

Konfigurace oboru názvů

Před použitím této funkce je potřeba nakonfigurovat obor názvů tak, aby umožňoval více relací na klienta. Pokud chcete nakonfigurovat více relací na klientovi na webu Azure Portal, postupujte takto:

  1. Na webu Azure Portal přejděte do svého oboru názvů.
  2. V části Konfigurace změňte hodnotu Maximální počet relací klienta na název ověřování na požadovaný počet relací.
  3. Vyberte Použít.

Poznámka:

V případě konfigurace Azure CLI aktualizujte MaxClientSessionsPerAuthenticationName vlastnost v datové části oboru názvů požadovanou hodnotou.

Tok připojení

Pakety CONNECT pro každou relaci by měly obsahovat následující vlastnosti:

  • Username Zadejte vlastnost v paketu CONNECT, která označuje název ověření klienta.
  • ClientID Do paketu CONNECT zadejte vlastnost, která označuje název relace, například pokud pro každé uživatelské jméno existuje jedna nebo více hodnot PRO ID klienta.

Například následující kombinace paketu Username CONNECT a ClientId v paketu CONNECT umožňují klientovi Mgmt-application připojit se ke zprostředkovateli MQTT přes tři nezávislé relace:

  • První relace:
    • Username: Mgmt-application
    • ClientId: Mgmt-Session1
  • Druhá relace:
    • Username: Mgmt-application
    • ClientId: Mgmt-Session2
  • Třetí relace:
    • Username: Mgmt-application
    • ClientId: Mgmt-Session3

Diagram znázorňující příklad více relací

Další informace naleznete v tématu Vytvoření více relací pro jednoho klienta.

Zpracování relací

  • Pokud se klient pokusí převzít aktivní relaci jiného klienta tím, že předá název relace jinému názvu ověřování, žádost o připojení se odmítne s chybou neautorizováno. Pokud se například klient B pokusí připojit k relaci 123 , která je přiřazená v daném okamžiku pro klienta A, žádost o připojení klienta B se odmítne. Pokud se ale stejný klient pokusí znovu připojit se stejnými názvy relací a stejným názvem ověřování, může převzít stávající relaci.
  • Pokud se prostředek klienta odstraní bez ukončení relace, ostatní klienti nemůžou použít jeho název relace, dokud nevyprší platnost relace. Pokud například klient B vytvoří relaci s názvem relace 123 a klient B se odstraní, klient A se nemůže připojit k relaci 123 , dokud nevyprší platnost.
  • Limit počtu relací na klienta platí pro online a offline relace v jakémkoli okamžiku. Představte si například obor názvů s maximálním počtem relací klienta podle názvu ověřování nastaveného na hodnotu 1. Klient A se připojí k trvalé relaci 123 a pak se odpojí. Klient A se nemůže připojit k nové relaci 456 , protože jeho relace 123 je stále aktivní, i když je offline. Proto doporučujeme, aby se stejný klient vždy znovu připojil se stejnými názvy statických relací, a ne generovat nový název relace při každém opětovném připojení.

Funkce MQTT

Zprostředkovatel Event Grid MQTT podporuje následující funkce MQTT.

technologie QoS (Quality of Service)

Zprostředkovatel MQTT podporuje úrovně QoS (Quality of Service) 0 a 1, které definují záruku doručení zpráv u paketů PUBLISH a SUBSCRIBE mezi klienty a zprostředkovatelem MQTT.

  • QoS 0 zaručuje doručení maximálně jednou: Odběratel nepotvrdí zprávy s QoS 0 a vydavatel je nepřevádí znovu.
  • QoS 1 zaručuje alespoň jedno doručení: Odběratel potvrdí zprávy a vydavatel je znovu přepojí, pokud nebyl potvrzen.

Technologie QoS umožňuje klientům řídit efektivitu a spolehlivost komunikace.

Trvalé relace

Zprostředkovatel MQTT podporuje trvalé relace pro MQTT v3.1.1, aby zprostředkovatel MQTT při odpojení zachoval informace o relaci klienta, aby se zajistila spolehlivost komunikace. Tyto informace zahrnují předplatná klienta a zmeškané nebo nevěděné zprávy QoS 1. Klienti mohou nakonfigurovat trvalou relaci nastavením cleanSession příznaku v paketu CONNECT na false.

Vyčištění spuštění a vypršení platnosti relace

MQTT v5 zavedl čisté funkce spuštění a vypršení platnosti relace jako vylepšení oproti MQTT v3.1.1 při zpracování trvalosti relací. Čisté spuštění umožňuje klientovi spustit novou relaci s zprostředkovatelem MQTT po zahození všech předchozích dat relace. Vypršení platnosti relace umožňuje klientovi informovat zprostředkovatele MQTT, když je neaktivní relace považována za ukončenou a automaticky odebrána.

V paketu CONNECT může klient nastavit Clean Start příznak na true. Klient může také nastavit krátký interval vypršení platnosti relace z bezpečnostních důvodů nebo zabránit konfliktům potenciálních dat, ke kterým mohlo dojít během předchozí relace. Klient může také nastavit Clean Start příznak na false nebo dlouhý interval vypršení platnosti relace, aby se zajistila spolehlivost a efektivita trvalých relací.

Konfigurace maximálního intervalu vypršení platnosti relace

Můžete nakonfigurovat maximální povolený interval vypršení platnosti relace pro všechny klienty, kteří se připojují k oboru názvů Služby Event Grid. U klientů MQTT v3.1.1 se nakonfigurovaný limit použije jako výchozí interval vypršení platnosti relace pro všechny trvalé relace. U klientů MQTT v5 se nakonfigurovaný limit použije jako maximální hodnota vlastnosti intervalu vypršení platnosti relace v paketu CONNECT. Jakákoli hodnota, která překročí limit, se upraví. Výchozí hodnota této vlastnosti oboru názvů je jedna hodina a může prodloužit až osm hodin. Pokud chcete nakonfigurovat maximální interval vypršení platnosti relace na webu Azure Portal, postupujte takto:

  1. Na webu Azure Portal přejděte do svého oboru názvů.
  2. V části Konfigurace změňte hodnotu maximálního intervalu vypršení platnosti relace v hodinách na požadovaný limit.
  3. Vyberte Použít.

Snímek obrazovky znázorňující konfiguraci maximálního intervalu vypršení platnosti relace

Přetečení relace

Zprostředkovatel MQTT udržuje frontu zpráv pro každou aktivní relaci MQTT, která není připojená, dokud se klient znovu nepřipojí ke zprostředkovateli MQTT, aby přijímal zprávy ve frontě. Pokud se klient nepřipojí k příjmu zpráv QoS 1 ve frontě, fronta relace shromažďuje zprávy, dokud nedosáhne limitu 100 zpráv nebo 1 MB. Po dosažení limitu fronty během životnosti relace se relace ukončí.

Poslední vůle a zákonní zprávy

Poslední Will a Zákon (LWT) oznámí klientům MQTT náhlé odpojení ostatních klientů MQTT. Pomocí LWT můžete zajistit předvídatelný a spolehlivý tok komunikace mezi klienty MQTT během neočekávaných odpojení. Tato schopnost je cenná pro scénáře, ve kterých je důležitá komunikace v reálném čase, spolehlivost systému a koordinované akce. Klienti, kteří spolupracují na provádění složitých úloh, můžou vzájemně reagovat na zprávy LWT úpravou jejich chování, redistribucí úkolů nebo převzetím určitých zodpovědností za zachování výkonu a stability systému.

Pokud chcete použít protokol LWT, může klient zadat zprávu Will, téma Will a zbytek vlastností Will v paketu CONNECT během připojení. Když se klient náhle odpojí, zprostředkovatel MQTT publikuje zprávu Will všem klientům, kteří se přihlásili k odběru tématu Will. Aby se snížil šum z proměnlivého odpojení, může klient nastavit interval zpoždění na hodnotu větší než nula. Pokud se klient v takovém případě náhle odpojí, ale obnoví připojení před vypršením intervalu zpoždění, zpráva Will se nepublikuje.

Uživatelské vlastnosti

Zprostředkovatel MQTT podporuje vlastnosti uživatele u paketů MQTT v5 PUBLISH, které můžete použít k přidání vlastních párů klíč/hodnota do hlavičky zprávy, aby bylo možné poskytnout další kontext zprávy. Případy použití pro vlastnosti uživatele jsou všestranné. Tuto funkci můžete použít k zahrnutí účelu nebo původu zprávy, aby příjemce mohl zpracovat zprávu bez analýzy datové části, která ukládá výpočetní prostředky. Například zpráva s vlastností uživatele, která označuje její účel jako "upozornění", může aktivovat jinou logiku zpracování než jednu s účelem "informace".

Model odpovědi na požadavek

MQTT v5 zavedla pole v hlavičce paketu MQTT PUBLISH, která poskytují kontext pro zprávu odpovědi ve vzoru odpovědi požadavku. Tato pole obsahují téma odpovědi a ID korelace, které může respondér použít v odpovědi bez předchozí konfigurace. Informace o odpovědích umožňují efektivnější komunikaci pro standardní vzor odezvy požadavku, který se používá ve scénářích řízení a příkazů.

Diagram znázorňující příklad vzoru žádosti a odpovědi

Interval vypršení platnosti zprávy

V MQTT v5 interval vypršení platnosti zprávy umožňuje, aby zprávy měly konfigurovatelnou životnost. Interval vypršení platnosti zprávy je definován jako časový interval mezi časem publikování zprávy do zprostředkovatele MQTT a časem, kdy zprostředkovatel potřebuje zahodit nedoručenou zprávu. Tato funkce je užitečná ve scénářích, kdy jsou zprávy platné jenom po určitou dobu, jako jsou příkazy citlivé na čas, streamování dat v reálném čase nebo výstrahy zabezpečení. Nastavením intervalu vypršení platnosti zprávy může zprostředkovatel MQTT automaticky odebrat zastaralé zprávy. Tento krok zajistí, že předplatitelům budou k dispozici jenom relevantní informace. Pokud je interval vypršení platnosti zprávy nastavený na nulu, znamená to, že zpráva by nikdy neměla vypršet.

Aliasy témat

V MQTT v5 umožňují klientům používat kratší alias místo celého názvu tématu v publikované zprávě. Zprostředkovatel MQTT udržuje mapování mezi aliasem tématu a skutečným názvem tématu. Tato funkce může ušetřit šířku pásma sítě a zmenšit velikost záhlaví zprávy, zejména u témat s dlouhými názvy. Je užitečné ve scénářích, kdy je stejné téma opakovaně publikováno ve více zprávách, například v sítích senzorů. Zprostředkovatel MQTT podporuje až 10 aliasů tématu. Klient může použít Topic Alias pole v paketu PUBLISH k nahrazení celého názvu tématu odpovídajícím aliasem.

Diagram znázorňující příklad aliasu tématu

Řízení toku

Řízení toku v MQTT v5 odkazuje na mechanismus správy rychlosti a velikosti zpráv, které klient dokáže zpracovat. Pokud chcete nakonfigurovat řízení toku, nastavte Maximum Packet Size parametry Receive Maximum v paketu CONNECT. Parametr Receive Maximum umožňuje klientovi omezit počet zpráv odeslaných zprostředkovatelem na počet zpráv, které klient dokáže zpracovat. Parametr Maximum Packet Size definuje maximální velikost paketů, které klient může přijímat. Zprostředkovatel MQTT má limit velikosti zprávy 512 KiB. Tato funkce zajišťuje spolehlivost a stabilitu komunikace pro omezená zařízení s omezenou rychlostí zpracování nebo možnostmi úložiště.

Negativní potvrzení a paket odpojení iniciovaný serverem

U MQTT v5 může zprostředkovatel MQTT odesílat negativní potvrzení a pakety odpojení iniciované serverem, které klientovi poskytují další informace o selháních doručení zprávy nebo připojení. Tyto funkce pomáhají klientovi diagnostikovat příčinu selhání a provádět vhodné akce pro zmírnění rizika. Zprostředkovatel MQTT používá kódy důvodů definované ve specifikaci MQTT v5.

Řazení zpráv

MQTT v5 zajišťuje doručování zpráv v pořadí v rámci každého tématu a každého klienta při použití úrovně QoS 1, což je zásadní pro pracovní postupy, které vyžadují sekvenční integritu. Je ideální pro scénáře, jako jsou telemetrie, spouštění příkazů a data časových řad.

Nezaručuje ale řazení v různých tématech ani při odesílání zpráv s různými úrovněmi QoS. Pokud se chcete dozvědět více, kontaktujte nás na adrese askmqtt@microsoft.com.

Přiřazené identifikátory klienta

MQTT v5 zavádí podporu přiřazených identifikátorů klientů, což umožňuje zprostředkovateli MQTT generovat a vracet jedinečné ID klienta, pokud ho klient neposkytuje. Podpora zprostředkovatele MQTT pro tuto funkci zajišťuje bezproblémovou registraci klientů a snižuje potřebu klientů spravovat vlastní identifikátory. Je zvlášť užitečné ve scénářích, kdy je zřizování klientů dynamické nebo když zařízení nemají předkonfigurovanou identitu. Přiřazené ID klientů je možné načíst z odpovědi CONNACK a znovu je použít pro budoucí relace, aby se zachovala konzistentní identifikace.

Správa limitů identifikátoru klienta a relací v MQTT

  • Přiřazené identifikátory klientů umožňují klientům připojit se bez zadání předdefinovaných identifikátorů, povolení dočasných nebo trvalých relací.
  • Klienti se můžou vyhnout uzamčení pomocí krátkých intervalů vypršení platnosti relace během prvního připojení a uložení přiřazeného identifikátoru klienta pro budoucí použití.
  • U aktualizací firmwaru nebo resetování by si klienti měli buď zachovat známý identifikátor klienta, nebo používat skromné intervaly vypršení platnosti relace, aby se zabránilo prodlouženým uzamčením.
  • Konfigurace oboru názvů může zvýšit limity relací na klienta, aby se minimalizovalo přerušování během aktualizací nebo vrácení změn.

Aktuální omezení

Zprostředkovatel MQTT v budoucnu přidává další funkce MQTT v5 a MQTT v3.1.1, které budou v souladu s specifikacemi MQTT. Následující seznam podrobně popisuje aktuální rozdíly mezi funkcemi podporovanými zprostředkovatelem MQTT a specifikacemi MQTT.

Aktuální omezení MQTT v5

MQTT v5 se v současné době liší od specifikace MQTT v5 následujícími způsoby:

  • Sdílená předplatná se zatím nepodporují.
  • Maximální interval zpoždění je 300.
  • Maximální počet QoS je 1.
  • Maximální velikost paketu je 512 KiB.
  • Identifikátory předplatného se nepodporují.
  • Alias tématu je maximálně 10. Server momentálně nepřiřazuje žádné aliasy tématu pro odchozí zprávy. Klienti můžou v rámci nastaveného limitu přiřadit a používat aliasy témat.
  • CONNACK nevrací Response Information vlastnost ani v případě, že požadavek CONNECT vlastnost obsahuje Request Response Information .
  • Vlastnosti uživatele v paketech CONNECT, SUBSCRIBE, DISCONNECT, PUBACK a AUTH služba nepoužívá, takže se nepodporují. Pokud některý z těchto požadavků zahrnuje vlastnosti uživatele, požadavek selže.
  • Pokud server obdrží paket PUBACK z klienta s kódem odpovědi bez úspěchu, připojení se ukončí.
  • Maximální doba uchování je 1 160 sekund.

Aktuální omezení MQTTv3.1.1

MQTT v5 se v současné době liší od specifikace MQTT v3.1.1 následujícími způsoby:

  • QoS 2 se nepodporuje. Žádost o publikování s příznakem RETAIN nebo QoS 2 selže a připojení se zavře.
  • Maximální doba uchování je 1 160 sekund.

Ukázky kódu

Toto úložiště obsahuje ukázky kódu jazyka C#, C a Python, které ukazují, jak odesílat telemetrická data, odesílat příkazy a vysílat upozornění. Certifikáty vytvořené prostřednictvím ukázek jsou vhodné pro testování, ale nejsou vhodné pro produkční prostředí.

Další informace o MQTT najdete ve specifikaci MQTT v5. Další informace o zprostředkovateli MQTT najdete tady: