Az Azure Event Grid MQTT-közvetítő funkciója által támogatott MQTT-funkciók

Az MQTT egy korlátozott környezetekhez tervezett, közzétételre feliratkozott üzenettovábbítási átviteli protokoll. Hatékony, skálázható és megbízható, ami az IoT-forgatókönyvekben való kommunikáció arany szabványa. Az MQTT-közvetítő támogatja azokat az ügyfeleket, amelyek az MQTT 3.1.1-es, MQTT v3.1.1-es v3.1.1-es verziós websocketeken, MQTT v5 és MQTT v5 protokollon keresztül tesznek közzé és iratkoznak fel üzenetekre WebSocketeken keresztül. Az MQTT-közvetítő támogatja a több MQTT-verzió (MQTT 3.1.1 és MQTT 5) közötti kommunikációt is.

Az MQTT v5 számos fejlesztést vezetett be az MQTT 3.1.1-es verzióval szemben, hogy zökkenőmentesebb, átláthatóbb és hatékonyabb kommunikációt biztosítson. A következőt adta hozzá:

  • Jobb hibajelentés.
  • Transzparensebb kommunikációs ügyfelek olyan funkciókon keresztül, mint a felhasználói tulajdonságok és a tartalomtípus.
  • Az ügyfelek jobban irányítják a kommunikációt olyan funkciókkal, mint az üzenet és a munkamenet lejárata.
  • Szabványos fontos minták, például a kérés-válasz minta.

Csatlakozás ionfolyamat:

Az MQTT-ügyfeleknek TLS 1.2 vagy TLS 1.3 protokollon keresztül kell csatlakozniuk. A lépés kihagyására tett kísérletek sikertelenek a kapcsolattal.

Az MQTT-közvetítőhöz való csatlakozás során használja a következő portokat az MQTT-en keresztüli kommunikáció során:

  • MQTT v3.1.1 és MQTT v5 a 8883-es TCP-porton
  • MQTT v3.1.1 a WebSocket és az MQTTv5 felett WebSocketen a 443-es TCP-porton.

A CONNECT-csomagnak a következő tulajdonságokat kell tartalmaznia:

  • A ClientId mező kötelező, és tartalmaznia kell az ügyfél munkamenetnevét. A munkamenet nevének egyedinek kell lennie a névtérben. Az ügyfél-hitelesítési nevet használhatja munkamenetnévként, ha minden ügyfél ügyfélenként egy munkamenetet használ. Ha egy ügyfél több munkamenetet használ, az egyes munkamenetekhez különböző értékeket kell használnia a ClientId számára.
  • A Felhasználónév mezőre akkor van szükség, ha a névtér létrehozásakor nem választott ki értéket az alternativeAuthenticationNameSources fájlban. Ebben az esetben meg kell adnia az ügyfél hitelesítési nevét a Felhasználónév mezőben. Ennek a névnek meg kell egyeznie a megadott hitelesítési névvel és az ügyfél tanúsítványmezőjének az ügyfélerőforrás létrehozása során megadott értékével.

További információ az ügyfélhitelesítésről .

Több munkamenet támogatása

A több munkamenetes támogatás lehetővé teszi, hogy az alkalmazás MQTT-ügyfelei skálázhatóbb és megbízhatóbb implementációval rendelkezzenek, ha egyszerre több aktív munkamenettel csatlakoznak az MQTT-közvetítőhöz.

Névtér konfigurálása

A funkció használata előtt konfigurálnia kell a névteret, hogy ügyfélenként több munkamenet is engedélyezve legyen. Az alábbi lépésekkel ügyfélenként több munkamenetet konfigurálhat az Azure Portalon:

  • Lépjen a névtérre az Azure Portalon.
  • A Konfiguráció területen módosítsa az ügyfél-munkamenetek maximális száma hitelesítési név szerint megadott értékét az ügyfélenkénti munkamenetek kívánt számára.
  • Válassza az Alkalmazás lehetőséget.

Feljegyzés

Az Azure CLI-konfigurációhoz frissítse a MaxClientSessionsPerAuthenticationName tulajdonságot a névtér hasznos adatai között a kívánt értékkel.

Csatlakozás ionfolyamat:

Az egyes munkamenetekhez tartozó CONNECT-csomagoknak a következő tulajdonságokat kell tartalmazniuk:

  • Adja meg a Felhasználónév tulajdonságot a CONNECT-csomagban az ügyfél-hitelesítés nevének aláírásához.
  • Adja meg a CLIENTID tulajdonságot a CONNECT-csomagban a munkamenet nevének aláírásához, például minden felhasználónévhez egy vagy több érték tartozik az Ügyfélazonosítóhoz.

A CONNECT-csomagban található felhasználónév és ügyfélazonosítók alábbi kombinációi például lehetővé teszik az "Mgmt-application" ügyfél számára, hogy három független munkameneten keresztül csatlakozzon az MQTT-közvetítőhöz:

  • Első munkamenet:
    • Felhasználónév: Mgmt-application
    • ClientId: Mgmt-Session1
  • Második munkamenet:
    • Felhasználónév: Mgmt-application
    • ClientId: Mgmt-Session2
  • Harmadik munkamenet:
    • Felhasználónév: Mgmt-application
    • ClientId: Mgmt-Session3

Több munkamenetből álló példa diagramja.

További információ: Több munkamenet létrehozása egyetlen ügyfélhez.

Munkamenetek kezelése:

  • Ha egy ügyfél úgy próbálja átvenni egy másik ügyfél aktív munkamenetét, hogy a munkamenet nevét egy másik hitelesítési névvel jeleníti meg, a rendszer jogosulatlan hibával elutasítja a kapcsolatkérést. Ha például a B ügyfél megpróbál csatlakozni az adott időpontban hozzárendelt 123-as munkamenethez az A ügyfél számára, a B ügyfél csatlakozási kérése elutasítva. Ennek ellenére, ha ugyanaz az ügyfél ugyanazzal a munkamenetnévvel és ugyanazzal a hitelesítési névvel próbál újra csatlakozni, át tudja venni a meglévő munkamenetet.
  • Ha egy ügyfélerőforrást a munkamenet befejezése nélkül törölnek, más ügyfelek csak a munkamenet lejárata után használhatják a munkamenet nevét. Ha például a B ügyfél létrehoz egy munkamenetet 123-zal, akkor a B ügyfél törlődik, az A ügyfél nem tud csatlakozni a 123-as munkamenethez, amíg el nem jár.
  • Az ügyfélenkénti munkamenetek számának korlátja bármikor érvényes az online és offline munkamenetekre. Vegyük például azt a névteret, amelynek hitelesítési neveként a maximális ügyfél-munkamenetek száma 1. Ha az A ügyfél egy 123-as állandó munkamenettel csatlakozik, akkor az A ügyfél nem tud csatlakozni egy új 456-os munkamenethez, mivel a 123-as munkamenet még akkor is aktív, ha offline állapotban van. Ennek megfelelően azt javasoljuk, hogy ugyanaz az ügyfél mindig ugyanazokat a statikus munkamenetneveket használja, nem pedig új munkamenetnevet generáljon minden újracsatlakozással.

MQTT-funkciók

Az Azure Event Grid MQTT-közvetítő funkciója az alábbi MQTT-funkciókat támogatja:

Szolgáltatásminőség (QoS)

Az MQTT-közvetítő támogatja a QoS 0-t és az 1-et, amely meghatározza az ügyfelek és az MQTT-közvetítő közötti PUBLISH és SUBSCRIBE csomagok üzenetkézbesítésének garanciát. A QoS 0 garantálja a kézbesítést a lehető legkésőbb időpontban; A QoS 0-s üzeneteket az előfizető nem nyugtázza, és a közzétevő sem küldi újra. A QoS 1 legalább egyszer biztosítja a kézbesítést; az üzeneteket az előfizető nyugtázza, és ha nem nyugtázza őket, a közzétevő újraközvetítést kap. A QoS lehetővé teszi az ügyfelek számára a kommunikáció hatékonyságát és megbízhatóságát.

Állandó munkamenetek

Az MQTT-közvetítő támogatja az MQTT 3.1.1-es verziójának állandó munkameneteit, így az MQTT-közvetítő a kommunikáció megbízhatóságának biztosítása érdekében megőrzi az ügyfél munkamenetével kapcsolatos információkat. Ezek az információk tartalmazzák az ügyfél előfizetéseit, valamint a kihagyott/ nem ismeretlen QoS 1-üzeneteket. Az ügyfelek konfigurálhatnak egy állandó munkamenetet, ha a CONNECT-csomagban lévő cleanSession jelzőt hamisra állítja.

A kezdés és a munkamenet lejáratának törlése

Az MQTT v5 az MQTT 3.1.1-es v3.1-es v3.1-es verzióval szemben továbbfejlesztette a tiszta kezdési és munkamenet-lejárati funkciókat a munkamenetek megőrzésének kezelése terén. A Clean Start egy olyan funkció, amely lehetővé teszi, hogy az ügyfél új munkamenetet indítson az MQTT-közvetítővel, elvetve a korábbi munkamenetadatokat. A munkamenet lejárata lehetővé teszi, hogy az ügyfél tájékoztassa az MQTT-közvetítőt, ha egy inaktív munkamenet lejártnak minősül, és automatikusan el lett távolítva. A CONNECT-csomagban az ügyfél biztonsági okokból beállíthatja a Clean Start jelölőt igaz és/vagy rövid munkamenet-lejárati időközre, vagy elkerülheti az előző munkamenet során esetlegesen előforduló adatütközéseket. Az ügyfél emellett beállíthatja a tiszta kezdést hamis és/vagy hosszú munkamenet-lejárati időközre az állandó munkamenetek megbízhatóságának és hatékonyságának biztosítása érdekében.

Munkamenet lejárati időközének maximális konfigurációja

Konfigurálhatja az Event Grid-névtérhez csatlakozó összes ügyfél számára engedélyezett maximális munkamenet-lejárati időközt. Az MQTT 3.1.1-es verziós ügyfelek esetében a konfigurált korlát az összes állandó munkamenet alapértelmezett lejárati időköze. MQTT v5-ügyfelek esetén a rendszer a konfigurált korlátot alkalmazza a CONNECT-csomag munkamenet-lejárati időköz tulajdonságának maximális értékeként; a korlátot meghaladó értékek módosulnak. Ennek a névtértulajdonságnak az alapértelmezett értéke 1 óra, és akár 8 órára is meghosszabbítható. Az alábbi lépésekkel konfigurálhatja a munkamenetek maximális lejárati időközét az Azure Portalon:

  • Lépjen a névtérre az Azure Portalon.
  • A Konfiguráció területen módosítsa a munkamenet maximális lejárati időközének értékét órákban a kívánt korlátra.
  • Válassza az Alkalmazás lehetőséget.

képernyőkép a munkamenet lejárati időközének maximális konfigurációjáról.

Munkamenet-túlcsordulás

Az MQTT-közvetítő fenntartja a nem csatlakoztatott aktív MQTT-munkamenetek üzenetsorát, amíg az ügyfél újra nem csatlakozik az MQTT-közvetítőhöz az üzenetsorban lévő üzenetek fogadásához. Ha egy ügyfél nem csatlakozik az üzenetsorba helyezett QOS1-üzenetek fogadásához, a munkamenet-üzenetsor elkezdi gyűjteni az üzeneteket, amíg el nem éri a korlátját: 100 üzenet vagy 1 MB. Ha az üzenetsor eléri a korlátot a munkamenet élettartama alatt, a munkamenet leáll.

Last Will and Testament (LWT) üzenetek (előzetes verzió)

A Last Will and Testament (LWT) értesíti az MQTT-ügyfeleket a többi MQTT-ügyfél hirtelen megszakadásával. Az LWT használatával kiszámítható és megbízható kommunikációt biztosíthat az MQTT-ügyfelek között váratlan leválasztások során, ami olyan helyzetekben hasznos, ahol a valós idejű kommunikáció, a rendszer megbízhatósága és az összehangolt műveletek kritikus fontosságúak. Az összetett feladatok végrehajtásában együttműködő ügyfelek a viselkedésük módosításával, a feladatok újraelosztásával vagy a rendszer teljesítményének és stabilitásának fenntartásával reagálhatnak az LWT-üzenetekre. Az LWT használatához az ügyfél megadhatja az akaratüzenetet, a will topicot és a connect csomag többi will tulajdonságát a kapcsolat során. Amikor az ügyfél hirtelen megszakad, az MQTT-közvetítő közzéteszi az akaratüzenetet az összes ügyfélnek, aki feliratkozott a will témakörre.

Felhasználói tulajdonságok

Az MQTT-közvetítő támogatja az MQTT v5 PUBLISH csomagok felhasználói tulajdonságait, amelyek lehetővé teszik egyéni kulcs-érték párok hozzáadását az üzenet fejlécében, hogy több kontextust biztosítson az üzenetről. A felhasználói tulajdonságok használati esetei sokoldalúak. Ezzel a funkcióval megadhatja az üzenet célját vagy forrását, hogy a fogadó anélkül tudja kezelni az üzenetet, hogy elemezze a hasznos adatokat, és így számítási erőforrásokat takarítson meg. Például egy felhasználói tulajdonsággal rendelkező üzenet, amely "figyelmeztetésként" jelzi a célját, eltérő kezelési logikát válthat ki, mint egy "információ" céllal.

Kérelem-válasz minta

Az MQTTv5 olyan mezőket vezetett be az MQTT PUBLISH csomagfejlécben, amelyek kontextust biztosítanak a válaszüzenethez a kérés-válasz mintában. Ezek a mezők tartalmaznak egy választémakört és egy korrelációs azonosítót, amelyet a válaszadó előzetes konfiguráció nélkül használhat a válaszban. A válaszinformációk hatékonyabb kommunikációt tesz lehetővé a parancs- és vezérlési forgatókönyvekben használt szabványos kérés-válasz mintához.

Példa a kérelem-válasz mintára.

Üzenet lejárati időköze:

Az MQTT v5-ben az üzenetek lejárati időköze lehetővé teszi az üzenetek konfigurálható élettartamát. Az üzenet lejárati időköze az üzenet MQTT-közvetítőn való közzététele és az MQTT-közvetítő által a kézbesítetlen üzenet elvetése közötti időintervallum. Ez a funkció olyan esetekben hasznos, amikor az üzenetek csak bizonyos ideig érvényesek, például időérzékeny parancsok, valós idejű adatstreamelés vagy biztonsági riasztások. Az üzenet lejárati időközének beállításával az MQTT-közvetítő automatikusan eltávolíthatja az elavult üzeneteket, biztosítva, hogy csak a releváns információk legyenek elérhetők az előfizetők számára. Ha egy üzenet lejárati időköze nullára van állítva, az azt jelenti, hogy az üzenetnek soha nem szabad lejárnia.

Témakör aliasai:

Az MQTT v5-ben a témakör aliasai lehetővé teszik, hogy az ügyfél rövidebb aliast használjon a közzétett üzenetben szereplő teljes témakörnév helyett. Az MQTT-közvetítő megfeleltetést tart fenn a témakör aliasa és a tényleges témakör neve között. Ez a funkció csökkentheti a hálózati sávszélességet, és csökkentheti az üzenet fejlécének méretét, különösen a hosszú neveket tartalmazó témakörök esetében. Olyan helyzetekben hasznos, amikor ugyanazt a témakört többször is közzéteszik több üzenetben, például az érzékelőhálózatokban. Az MQTT-közvetítő legfeljebb 10 témakör-aliast támogat. Az ügyfél a PUBLISH csomagban lévő Témakör alias mezőjével lecserélheti a teljes témakörnevet a megfelelő aliasra.

Példa a témakör aliasára.

Folyamatvezérlés

Az MQTT v5-ben a folyamatvezérlés az ügyfél által kezelhető üzenetek sebességének és méretének kezelésére szolgáló mechanizmus. A folyamatvezérlés úgy konfigurálható, hogy beállítja a maximális csomagméretet és a maximális fogadási paramétereket a CONNECT-csomagban. A Maximális fogadás paraméter lehetővé teszi az ügyfél számára, hogy a közvetítő által küldött üzenetek számát az ügyfél által kezelni képes üzenetek számára korlátozza. A Maximális csomagméret paraméter határozza meg az ügyfél által fogadható csomagok maximális méretét. Az MQTT-közvetítő üzenetméretének korlátja 512 KiB. Ez a funkció biztosítja a korlátozott feldolgozási sebességgel vagy tárolási képességekkel rendelkező korlátozott eszközök kommunikációjának megbízhatóságát és stabilitását.

Negatív visszaigazolások és kiszolgáló által kezdeményezett kapcsolatbontási csomag

Az MQTT v5 esetén az MQTT-közvetítő negatív nyugtázásokat (NACK-okat) és kiszolgáló által kezdeményezett kapcsolatleválasztási csomagokat küldhet, amelyek további információt nyújtanak az ügyfélnek az üzenetkézbesítési vagy kapcsolati hibákról. Ezek a funkciók segítenek az ügyfélnek diagnosztizálni a hiba okát, és megfelelő enyhítő műveleteket végrehajtani. Az MQTT-közvetítő az MQTT v5 specifikációban meghatározott okkódokat használja.

Jelenlegi korlátozások

Az MQTT-közvetítő a jövőben további MQTT v5 és MQTT v3.1.1 funkciókat ad hozzá, hogy jobban igazodjon az MQTT specifikációihoz. Az alábbi lista az MQTT-közvetítő által támogatott funkciók és az MQTT-specifikációk közötti aktuális különbségeket ismerteti:

Az MQTTv5 aktuális korlátozásai

Az MQTT v5 jelenleg eltér az MQTT v5 specifikációjától a következő módokon:

  • A megosztott előfizetések még nem támogatottak.
  • A jelölő megtartása még nem támogatott.
  • A késleltetési időköz egyelőre nem támogatott.
  • A QoS maximális száma 1.
  • A csomag maximális mérete 512 KiB
  • Az üzenetsorrendezés nem garantált.
  • Az előfizetés-azonosítók nem támogatottak.
  • A hozzárendelt ügyfélazonosítók még nem támogatottak.
  • A témakör aliasának maximális száma 10. A kiszolgáló jelenleg nem rendel hozzá témakör-aliasokat a kimenő üzenetekhez. Az ügyfelek a megadott korláton belül hozzárendelhetnek és használhatnak témakör-aliasokat.
  • A CONNACK akkor sem ad vissza Válaszinformáció tulajdonságot, ha a CONNECT-kérelem a Kérelem válaszinformáció tulajdonságát tartalmazza.
  • A connect, SUBSCRIBE, DISCONNECT, PUBACK, AUTH csomagok felhasználói tulajdonságait a szolgáltatás nem használja, így azok nem támogatottak. Ha ezen kérések bármelyike felhasználói tulajdonságokat is tartalmaz, a kérés meghiúsul.
  • Ha a kiszolgáló nem sikeres válaszkóddal rendelkező ügyféltől kap PUBACK-et, a kapcsolat megszakad.
  • A Keep Alive Maximum 1160 másodperc.

Az MQTTv3.1.1 aktuális korlátozásai

Az MQTT v5 jelenleg eltér az MQTT v3.1.1 specifikációjától az alábbi módokon:

  • A QoS2 és a Jelölő megőrzése még nem támogatott. A megőrző jelölővel vagy QoS2-vel rendelkező közzétételi kérelem meghiúsul, és bezárja a kapcsolatot.
  • Az üzenetsorrendezés nem garantált.
  • A Keep Alive Maximum 1160 másodperc.

Kódminták:

Ez az adattár C#, C és Python kódmintákat tartalmaz, amelyek bemutatják a telemetriai adatok küldését, a parancsok küldését és a riasztások szórását. A mintákon keresztül létrehozott tanúsítványok alkalmasak a tesztelésre, de nem alkalmasak éles környezetekhez.

Következő lépések:

További információ az MQTT-ről:

További információ az MQTT-közvetítőről: