Funkce MQTT podporované funkcí zprostředkovatele MQTT ve službě Azure Event Grid
MQTT je přenosový protokol pro zasílání zpráv publikování a odběru, který byl navržen pro omezená prostředí. Je efektivní, škálovatelný a spolehlivý, což z něj udělalo zlatý standard pro komunikaci ve scénářích 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 WebSockets, MQTT v5 a MQTT v5 přes WebSockets. Zprostředkovatel MQTT podporuje také komunikaci mezi verzemi MQTT (MQTT 3.1.1 a MQTT 5).
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ší komunikační klienti 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 1.2 nebo TLS 1.3. Pokusy o přeskočení tohoto kroku selžou s připojením.
Při připojování ke zprostředkovateli MQTT použijte během komunikace přes MQTT následující porty:
- MQTT v3.1.1 a MQTT v5 na portu TCP 8883
- MQTT v3.1.1 přes WebSocket a MQTTv5 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 relací použít různé hodnoty ClientId.
- Pole Uživatelské jméno je povinné, pokud jste při vytváření oboru názvů nevybrali hodnotu v alternativním zdroji názvůAuthenticationNameSources. V takovém případě musíte zadat ověřovací název klienta do pole Uživatelské jméno. 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. Pomocí následujících kroků nakonfigurujte na webu Azure Portal několik relací na jednotlivé klienty:
- Na webu Azure Portal přejděte do svého oboru názvů.
- V části Konfigurace změňte hodnotu maximálního počtu relací klienta na název ověřování na požadovaný počet relací na klienta.
- Vyberte Použít.
Poznámka:
V případě konfigurace Azure CLI aktualizujte vlastnost MaxClientSessionsPerAuthenticationName 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:
- Zadejte vlastnost Uživatelské jméno v paketu CONNECT, která označuje název ověřování klienta.
- Do paketu CONNECT zadejte vlastnost ClientID, která označuje název relace, například jednu nebo více hodnot pro ID klienta pro každé uživatelské jméno.
Například následující kombinace uživatelských jmen a ID klienta v paketu CONNECT umožňují klientovi Mgmt-application připojit se ke zprostředkovateli MQTT přes tři nezávislé relace:
- První relace:
- Uživatelské jméno:
Mgmt-application
- ClientId:
Mgmt-Session1
- Uživatelské jméno:
- Druhá relace:
- Uživatelské jméno:
Mgmt-application
- ClientId:
Mgmt-Session2
- Uživatelské jméno:
- Třetí relace:
- Uživatelské jméno:
Mgmt-application
- ClientId:
Mgmt-Session3
- Uživatelské jméno:
Další informace naleznete v tématu Jak vytvořit 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. Například pokud se klient B pokusí připojit k relaci 123, která je přiřazena v té době pro klienta A, žádost o připojení klienta B se odmítne. To znamená, že pokud se 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, 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 klientských relací na název ověřování nastavený na hodnotu 1. Pokud se klient A připojí k trvalé relaci 123 a pak se odpojí, klient A se nebude moct připojit k nové relaci 456, protože její 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
Funkce zprostředkovatele MQTT služby Azure Event Grid podporuje následující funkce MQTT:
Kvalita služby (QoS)
Zprostředkovatel MQTT podporuje technologii QoS 0 a 1, která definuje záruku doručení zpráv u paketů PUBLISH a SUBSCRIBE mezi klienty a zprostředkovatelem MQTT. QoS 0 zaručuje nanejvýš jedno doručení; zprávy s QoS 0 nejsou potvrzeny odběratelem ani se nepřesouvají vydavatelem. QoS 1 zaručuje alespoň jedno doručení; odběratele potvrdí zprávy a vydavatel je přeposílají znovu, pokud se nepotvrdili. 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 zachoval informace o relaci klienta v případě odpojení, 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 příznaku cleanSession v paketu CONNECT na hodnotu 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í. Clean Start je funkce, která klientovi umožňuje spustit novou relaci s zprostředkovatelem MQTT a zahodit všechna předchozí data 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 příznak Vyčistit start na true nebo krátký interval vypršení platnosti relace z bezpečnostních důvodů nebo zabránit potenciálním konfliktům dat, ke kterým mohlo dojít během předchozí relace. Klient může také nastavit čistý začátek 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. Pro klienty MQTT v5 se nakonfigurovaný limit použije jako maximální hodnota pro vlastnost Interval vypršení platnosti relace v paketu CONNECT; libovolná hodnota, která překračuje limit, se upraví. Výchozí hodnota této vlastnosti oboru názvů je 1 hodina a dá se prodloužit až o 8 hodin. Pomocí následujících kroků nakonfigurujte maximální interval vypršení platnosti relace na webu Azure Portal:
- Na webu Azure Portal přejděte do svého oboru názvů.
- V části Konfigurace změňte hodnotu maximálního intervalu vypršení platnosti relace v hodinách na požadovaný limit.
- Vyberte Použít.
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 QOS1 ve frontě, fronta relace začne shromádovat zprávy, dokud nedosáhne svého limitu: 100 zpráv nebo 1 MB. Jakmile fronta dosáhne limitu během životnosti relace, relace se ukončí.
Poslední vůle a zákon (LWT) zprávy
Poslední Will a Zákon (LWT) oznámí klientům MQTT náhlé odpojení ostatních klientů MQTT. LWT můžete použít k zajištění předvídatelného a spolehlivého toku komunikace mezi klienty MQTT během neočekávaných odpojení, což je cenné pro scénáře, kdy 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 LWT, klient může zadat zprávu will, bude téma a zbytek vlastností v paketu CONNECT během připojení. Když se klient náhle odpojí, zprostředkovatel MQTT publikuje zprávu všem klientům, kteří se přihlásili k odběru tématu. Pokud chcete snížit šum z kolísání odpojení, klient může 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 se nepublikuje.
Uživatelské vlastnosti
Zprostředkovatel MQTT podporuje vlastnosti uživatele u paketů MQTT v5 PUBLISH, které umožňují přidat do hlavičky zprávy vlastní páry klíč-hodnota, které poskytují 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 a ukládání výpočetních prostředků. Například zpráva s vlastností uživatele označující její účel jako "upozornění" může aktivovat jinou logiku zpracování než zprávu s účelem "informace".
Model odpovědi na požadavek
MQTTv5 zavedl 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ědi umožňují efektivnější komunikaci pro standardní model odezvy požadavku, který se používá ve scénářích řízení a příkazů.
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, kdy je zpráva publikována do zprostředkovatele MQTT a čas, kdy zprostředkovatel MQTT 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, například 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 a zajistit, aby byly předplatitelům 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 pole Alias tématu v paketu PUBLISH k nahrazení celého názvu tématu odpovídajícím aliasem.
Řízení toku
Řízení toku v MQTT v5 odkazuje na mechanismus správy rychlosti a velikosti zpráv, které klient dokáže zpracovat. Řízení toku lze nakonfigurovat nastavením maximální velikosti paketu a příjmu maximálních parametrů 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 Maximální velikost paketu 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í (NACK) 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.
Aktuální omezení
Zprostředkovatel MQTT přidává další funkce MQTT v5 a MQTT v3.1.1 v budoucnu, aby se více přizpůsobil specifikacím MQTT. Následující seznam podrobně popisuje aktuální rozdíly mezi funkcemi podporovanými zprostředkovatelem MQTT a specifikacemi MQTT:
Aktuální omezení MQTTv5
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í.
- Příznak zachování ještě není podporovaný.
- Maximální interval zpoždění je 300.
- Maximální počet QoS je 1.
- Maximální velikost paketu je 512 KiB
- Řazení zpráv není zaručeno.
- Identifikátory předplatného se nepodporují.
- Přiřazené identifikátory klientů se zatím nepodporují.
- Alias tématu Maximum je 10. Server momentálně nepřiřazuje žádné aliasy tématu pro odchozí zprávy. Klienti mohou přiřazovat a používat aliasy témat v rámci nastaveného limitu.
- CONNACK nevrací vlastnost Informace o odpovědi, ani když požadavek CONNECT obsahuje vlastnost Informace o odpovědi požadavku.
- Vlastnosti uživatele ve službě CONNECT, SUBSCRIBE, DISCONNECT, PUBACK a AUTH nejsou službou používány, takže se nepodporují. Pokud některý z těchto požadavků zahrnuje vlastnosti uživatele, požadavek selže.
- Pokud server obdrží PUBACK od klienta s kódem odpovědi, který není úspěšný, připojení se ukončí.
- Hodnota Keep Alive Maximum 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:
- QoS2 a Zachovat příznak se zatím nepodporují. Žádost o publikování s příznakem zachování nebo S QoS2 selže a připojení se zavře.
- Řazení zpráv není zaručeno.
- Hodnota Keep Alive Maximum 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ší kroky:
Další informace o MQTT:
Další informace o zprostředkovateli MQTT: