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.
Kapcsolati folyamat:
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.
Kapcsolati folyamat:
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
- Ügyfélazonosító:
Mgmt-Session1
- Felhasználónév:
- Második munkamenet:
- Felhasználónév:
Mgmt-application
- Ügyfélazonosító:
Mgmt-Session2
- Felhasználónév:
- Harmadik munkamenet:
- Felhasználónév:
Mgmt-application
- Ügyfélazonosító:
Mgmt-Session3
- Felhasználónév:
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, majd megszakad, 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.
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
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. Az ingadozó leválasztások zajának csökkentése érdekében az ügyfél beállíthatja a késleltetési időközt nullánál nagyobb értékre. Ebben az esetben, ha az ügyfél hirtelen megszakad, de visszaállítja a kapcsolatot, mielőtt lejár a késleltetési időköz, az üzenet nem lesz közzétéve.
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.
Ü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.
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 maximális késleltetési időköz 300.
- 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: