Az IoT Hubon keresztüli felhőalapú üzenetküldés ismertetése
A felhőalapú üzenetek egyirányú értesítések a megoldás háttérrendszerétől az eszközalkalmazásig. Az Azure IoT Hub által támogatott egyéb felhőbeli eszközökre vonatkozó lehetőségek megvitatásához tekintse meg a felhőről az eszközre vonatkozó kommunikációs útmutatót.
Feljegyzés
A cikkben ismertetett funkciók csak az IoT Hub standard szintjén érhetők el. Az alapszintű és standard/ingyenes IoT Hub-szintekről további információt a megoldáshoz megfelelő IoT Hub-szint kiválasztása című témakörben talál.
A felhőből az eszközre irányuló üzeneteket egy szolgáltatáshoz kapcsolódó végponton keresztül küldi el, /messages/devicebound. Az eszköz ezután egy eszközspecifikus végponton keresztül fogadja az üzeneteket, /devices/{deviceId}/messages/devicebound.
Ha az egyes felhőbeli üzeneteket egyetlen eszközön szeretné megcélzni, az IoT Hub a tulajdonságot a /devices/{deviceId}/messages/devicebound értékre állítja.
Az egyes eszközsorok legfeljebb 50 felhőből eszközre irányuló üzenetet tárolnak. Hiba történik, ha több üzenetet próbál elküldeni ugyanarra az eszközre.
Ez a cikk a felhőből az eszközre irányuló üzenetekre vonatkozó fogalmakat és folyamatokat ismerteti. A felhőből az eszközre irányuló üzeneteket kezelő alkalmazások fejlesztésére vonatkozó útmutatásért tekintse meg a felhőből az eszközre irányuló üzenetek küldését és fogadását ismertető témakört.
A felhőből az eszközre irányuló üzenet életciklusa
Az üzenetkézbesítés biztosítása érdekében az IoT Hub az eszközenkénti üzenetsorokban továbbra is megőrzi a felhőből az eszközre irányuló üzeneteket. Az eszközöknek kifejezetten el kell fogadniuk az üzenet befejezését , mielőtt az IoT Hub eltávolítja az üzenetet az üzenetsorból. Ez a megközelítés garantálja a csatlakozási és eszközhibákkal szembeni rugalmasságot.
Az életciklus állapotdiagramja az alábbi ábrán jelenik meg:
Amikor az IoT Hub szolgáltatás üzenetet küld egy eszköznek, a szolgáltatás az üzenet állapotát Enqueued értékre állítja. Ha egy eszközszál készen áll az üzenet fogadására, az IoT Hub zárolja az üzenetet úgy, hogy az állapotot láthatatlanra állítja. Ez az állapot lehetővé teszi, hogy az eszközön lévő többi szál más üzeneteket fogadjon. Amikor egy eszközszál befejezi egy üzenet feldolgozását, az üzenet befejezésével értesíti az IoT Hubot. Az IoT Hub ezután befejezett állapotúra állítja az állapotot.
Az eszközök a következőket is megtehetik:
Utasítsa el az üzenetet, amely miatt az IoT Hub a Holt betűs állapotra állítja . Ezeknek az üzeneteknek a helyreállításához nincs kézbesítetlen levelek várólistája. A Message Queuing Telemetry Transport (MQTT) protokollon keresztül csatlakozó eszközök nem utasíthatják el a felhőből az eszközre irányuló üzeneteket.
Hagyjon fel az üzenettel, ami miatt az IoT Hub visszaállítja az üzenetet az üzenetsorba, és az állapot enqueued értékre van állítva. Az MQTT protokollon keresztül csatlakozó eszközök nem hagyhatják fel a felhőből az eszközre irányuló üzeneteket.
Egy szál nem tudja feldolgozni az üzeneteket az IoT Hub értesítése nélkül. Ebben az esetben az üzenetek automatikusan visszaállnak a Láthatatlan állapotról az Enqueued állapotra a láthatóság időtúllépése (vagy az időtúllépés zárolása) után. Az időtúllépés időtartama egy perc, és nem módosítható.
Az IoT Hub maximális kézbesítésszám tulajdonsága határozza meg, hogy egy üzenet legfeljebb hány alkalommal válthat át az Enqueued és a Láthatatlan állapotok között. Az áttűnések száma után az IoT Hub az üzenet állapotát Holt betűsre állítja. Hasonlóképpen, az IoT Hub beállítja egy üzenet állapotát a lejárati idő után kézbesítetlen betűre .
Az eszközök általában felhőből eszközre irányuló üzenetet hajtanak végre, ha az üzenet elvesztése nem befolyásolja az alkalmazás logikáját. Erre a befejezésre példa lehet, ha az eszköz helyben megőrizte az üzenet tartalmát, vagy sikeresen végrehajtott egy műveletet. Az üzenet átmeneti információkat is hordozhat, amelyek elvesztése nem befolyásolná az alkalmazás működését. A hosszú ideig futó feladatok esetében néha a következő műveleteket végezheti el:
Töltse ki a felhőből az eszközre üzenetet, miután az eszköz megőrizte a feladat leírását a helyi tárolóban.
Értesítse a megoldás háttérrendszerét egy vagy több eszközről felhőbe irányuló üzenettel a feladat különböző fázisaiban.
Üzenet lejárata (élettartam)
Minden felhőből eszközre irányuló üzenet lejárati ideje van. Ezt az időpontot az alábbi lehetőségek valamelyike állítja be:
- A Szolgáltatás ExpiryTimeUtc tulajdonsága
- Az IoT Hub az IoT Hub tulajdonságként megadott alapértelmezett élettartam használatával
Az üzenet lejáratával kapcsolatos további információkért tekintse meg a felhőből az eszközre vonatkozó konfigurációs beállításokat.
Az üzenetek lejáratának előnyeinek kihasználására és az üzenetek leválasztott eszközökre való küldésének elkerülésére gyakran a rövid élettartam beállítása az élő értékekre. Ez a megközelítés ugyanazt az eredményt éri el, mint az eszköz kapcsolati állapotának fenntartása, de hatékonyabb. Amikor üzenet-visszaigazolást kér, az IoT Hub értesíti Önt, hogy mely eszközök a következők:
- Képes üzenetek fogadására.
- Nincs online állapotban, vagy sikertelen volt.
Üzenetvisszajelzés
Ha felhőből eszközre irányuló üzenetet küld, a szolgáltatás kérheti az üzenetenkénti visszajelzés küldését az üzenet végleges állapotáról. Az üzenetvisszajelzések konfigurálásához állítsa be az iothub-ack alkalmazástulajdonságot a felhőből az eszközre irányuló üzenetben, amelyet a következő négy érték egyikére küld el:
Ack tulajdonság értéke | Működés |
---|---|
Nincs | Default (Alapértelmezett): Az IoT Hub nem hoz létre visszajelzési üzenetet. |
pozitív | Ha a felhőből az eszközre irányuló üzenet eléri a Kész állapotot, az IoT Hub visszajelzési üzenetet hoz létre. |
negatív | Ha a felhőből az eszközre irányuló üzenet eléri a Holt betűs állapotot , az IoT Hub visszajelzési üzenetet hoz létre. |
korlátlan | Az IoT Hub mindkét esetben visszajelzési üzenetet hoz létre. |
Ha az Ack tulajdonság értéke megtelt, és nem kap visszajelzési üzenetet, az azt jelenti, hogy a visszajelzési üzenet lejárt. A szolgáltatás nem tudja, mi történt az eredeti üzenetben. A gyakorlatban a szolgáltatásnak biztosítania kell, hogy a visszajelzést a lejárata előtt feldolgozni tudja. A maximális lejárati idő két nap, ami időt hagy arra, hogy hiba esetén újra futtassa a szolgáltatást.
A Végpontok című témakörben leírtak szerint az IoT Hub üzenetként küld visszajelzést egy szolgáltatással rendelkező végponton keresztül, /messages/servicebound/feedback. A visszajelzések fogadásának szemantikája megegyezik a felhőből az eszközre irányuló üzenetek esetében használt szemantikával. Amikor csak lehetséges, az üzenetvisszajelzések egyetlen üzenetben lesznek kötegelve, a következő formátumban:
Tulajdonság | Leírás |
---|---|
EnqueuedTime | Időbélyeg, amely jelzi, hogy mikor érkezett a visszajelzési üzenet a központhoz. |
UserId | {iot hub name} |
ContentType | application/vnd.microsoft.iothub.feedback.json |
A rendszer akkor küldi el a visszajelzést, ha a köteg eléri a 64 üzenetet, vagy 15 másodperc múlva az utolsó elküldött üzenettől, attól függően, hogy melyik az első.
A törzs egy JSON-szerializált rekordtömb, amelyek mindegyike a következő tulajdonságokkal rendelkezik:
Tulajdonság | Leírás |
---|---|
enqueuedTimeUtc | Időbélyeg, amely jelzi, hogy mikor történt az üzenet kimenetele. Például egy időbélyeg, amely azt jelzi, hogy a központ mikor kapta meg a visszajelzési üzenetet, vagy az eredeti üzenet lejárt. |
originalMessageId | Annak a felhőalapú üzenetnek a MessageId azonosítója, amelyhez ez a visszajelzési információ kapcsolódik. |
statusCode | Az IoT Hub által létrehozott visszajelzési üzenetekben használt kötelező sztring: Siker Lejárt DeliveryCountExceeded Elutasította Kiürítve |
leírás | A StatusCode sztringértékei. |
deviceId | Annak a felhőről eszközre irányuló üzenet céleszközének DeviceId azonosítója, amelyhez ez a visszajelzés kapcsolódik. |
deviceGenerationId | Annak a felhőről eszközre irányuló üzenet céleszközének DeviceGenerationId azonosítója, amelyhez ez a visszajelzés kapcsolódik. |
A szolgáltatásnak meg kell adnia egy MessageId azonosítót, hogy a felhőből az eszközre irányuló üzenet összefüggésbe tudja állítani a visszajelzést az eredeti üzenettel.
A visszajelzési üzenet törzse a következő kód példában jelenik meg:
[
{
"originalMessageId": "0987654321",
"enqueuedTimeUtc": "2015-07-28T16:24:48.789Z",
"statusCode": "Success",
"description": "Success",
"deviceId": "123",
"deviceGenerationId": "abcdefghijklmnopqrstuvwxyz"
},
{
...
},
...
]
Függőben lévő visszajelzés törölt eszközökről
Az eszköz törlésekor a függőben lévő visszajelzések is törlődnek. A rendszer kötegekben küldi el az eszközvisszajelzéseket. Egy keskeny, gyakran egy másodpercnél rövidebb ablak akkor fordulhat elő, amikor egy eszköz megerősíti az üzenet fogadását, és amikor a következő visszajelzési köteg elkészül. Ha egy eszköz törlődik a szűk ablakban, a visszajelzés nem történik meg.
Ezt a viselkedést úgy oldhatja meg, hogy az eszköz törlése előtt várakozik egy ideig, amíg a függőben lévő visszajelzések érkeznek. A kapcsolódó üzenetvisszajelzéseket az eszköz törlése után elveszettnek kell tekinteni.
Felhő–eszköz konfigurációs beállítások
Minden IoT Hub a következő konfigurációs beállításokat teszi elérhetővé a felhőből az eszközre irányuló üzenetküldéshez:
Tulajdonság | Leírás | Tartomány és alapértelmezett |
---|---|---|
defaultTtlAsIso8601 | Alapértelmezett TTL a felhőből az eszközre irányuló üzenetekhez | ISO_8601 intervallum legfeljebb két nap (legalább egy perc); alapértelmezett: egy óra |
maxDeliveryCount | A felhőből eszközre irányuló üzenetsorok maximális kézbesítési száma | 1–100; alapértelmezett: 10 |
feedback.ttlAsIso8601 | Szolgáltatáshoz kötött visszajelzési üzenetek megőrzése | ISO_8601 intervallum legfeljebb két nap (legalább egy perc); alapértelmezett: egy óra |
feedback.maxDeliveryCount | A visszajelzési üzenetsor maximális kézbesítési száma | 1–100; alapértelmezett: 10 |
feedback.lockDurationAsIso8601 | A visszajelzési üzenetsor zárolási időtartama | ISO_8601 5 és 300 másodperc közötti időközt (legalább öt másodperc); alapértelmezett: 60 másodperc. |
A konfigurációs beállításokat az Azure Portalon vagy az Azure CLI-ben állíthatja be:
Azure Portal: Az IoT Hub Hub Hub beállításai alatt válassza a Beépített végpontok lehetőséget, és lépjen a Felhőbe az eszközüzenet-kezeléshez. (A feedback.maxDeliveryCount és a feedback.lockDurationAsIso8601 tulajdonságok beállítása jelenleg nem támogatott az Azure Portalon.)
Azure CLI: Az az iot hub frissítési parancsának használata:
az iot hub update --name {your IoT hub name} \ --set properties.cloudToDevice.defaultTtlAsIso8601=PT1H0M0S az iot hub update --name {your IoT hub name} \ --set properties.cloudToDevice.maxDeliveryCount=10 az iot hub update --name {your IoT hub name} \ --set properties.cloudToDevice.feedback.ttlAsIso8601=PT1H0M0S az iot hub update --name {your IoT hub name} \ --set properties.cloudToDevice.feedback.maxDeliveryCount=10 az iot hub update --name {your IoT hub name} \ --set properties.cloudToDevice.feedback.lockDurationAsIso8601=PT0H1M0S
Következő lépések
A felhőalapú üzenetek kezelésére használható SDK-kkal kapcsolatos információkért lásd az Azure IoT Hub SDK-jait.
A felhőből az eszközre irányuló üzeneteket kezelő alkalmazások fejlesztésére vonatkozó útmutatásért tekintse meg a felhőből az eszközre irányuló üzenetek küldését és fogadását ismertető témakört.