Felhőből eszközre irányuló üzenetek küldése IoT Hubról
Ha egyirányú értesítéseket szeretne küldeni egy eszközalkalmazásnak a megoldás háttérrendszeréből, küldjön felhőből eszközre irányuló üzeneteket az IoT Hubról az eszközére. A Azure IoT Hub által támogatott egyéb felhő-eszköz lehetőségekről a Felhőről eszközre vonatkozó kommunikációs útmutató című témakörben olvashat.
Megjegyzés
A cikkben ismertetett funkciók csak a IoT Hub standard szintjén érhetők el. Az alapszintű és standard/ingyenes IoT Hub szintekkel kapcsolatos további információkért lásd: A megoldáshoz megfelelő IoT Hub szint kiválasztása.
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ök ezután egy eszközspecifikus végponton keresztül fogadják az üzeneteket, /devices/{deviceId}/messages/devicebound.
Ha az egyes felhőből eszközre irányuló üzeneteket egyetlen eszközön szeretné megcélzni, az IoT Hub a tulajdonságot /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.
A felhőből az eszközre irányuló üzenet életciklusa
A legalább egyszeri üzenetkézbesítés garantálása érdekében az IoT Hub az eszközönké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 egy üzenet befejezését , mielőtt az IoT Hub eltávolítja az üzenetet az üzenetsorból. Ez a megközelítés biztosítja a csatlakozási és eszközhibák elleni 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. Amikor egy eszköz üzenetet szeretne kapni , az IoT Hub zárolja az üzenetet úgy, hogy az állapotot Láthatatlan értékre á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 Befejezve értékre állítja az állapotot.
Az eszközök a következőket is megtehetik:
Utasítsa el az üzenetet, ami miatt az IoT Hub Holt betűs állapotba állítja . 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.
Hagyja abba az üzenetet, 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.
Előfordulhat, hogy 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. Ennek az időtúllépésnek az értéke 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ányszor válthat át az Enqueued és a Láthatatlan állapot 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 egy üzenet állapotát Holt betűre állítja a lejárati idő után. További információ: Üzenet lejárata (élettartam).
A Felhőalapú üzenetek küldése IoT Hub című cikk bemutatja, hogyan küldhet felhőből eszközre irányuló üzeneteket a felhőből, és hogyan fogadhatja őket egy eszközön.
Az eszközök általában akkor hajtanak végre felhőből eszközre irányuló üzenetet, 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 helyileg 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ásolja 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 irányuló ü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ó üzenetnek lejárati ideje van. Ezt az időpontot az alábbi lehetőségek közül választhatja ki:
- A szolgáltatás ExpiryTimeUtc tulajdonsága
- Az IoT Hub az IoT Hub tulajdonságként megadott alapértelmezett élettartam használatával
További információ az üzenetek lejáratáról: Felhőből eszközre történő konfigurációs beállítások.
Az üzenetek lejáratának kihasználása és az üzenetek leválasztott eszközökre való küldésének elkerülése érdekében gyakran előfordul, hogy rövid időt állít be é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 nyugtázást kér, az IoT Hub értesíti, hogy mely eszközök a következők:
- Képes üzeneteket fogadni.
- Nincs online állapotban, vagy nem sikerült.
Üzenetre adott visszajelzés
Amikor felhőből eszközre irányuló üzenetet küld, a szolgáltatás kérheti az üzenetenkénti visszajelzés kézbesítését az üzenet végleges állapotáról. Az üzenetvisszajelzést úgy konfigurálhatja, hogy beállítja az iothub-ack alkalmazás tulajdonságot a felhőből az eszközre irányuló üzenetben, amelyet a következő négy érték egyikére küld:
Ack tulajdonságérték | 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. |
Teljes | Az IoT Hub mindkét esetben létrehoz egy visszajelzési üzenetet. |
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 gondoskodnia kell arról, hogy a szolgáltatás feldolgozni tudja a visszajelzést, mielőtt lejár. A maximális lejárati idő két nap, ami időt hagy arra, hogy hiba esetén a szolgáltatás újra fusson.
A Végpontok című témakörben leírtak szerint az IoT Hub üzenetként küld visszajelzést egy szolgáltatáshoz kapcsolódó 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. 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 azt jelzi, hogy mikor érkezett a visszajelzési üzenet a központhoz. |
UserId (Felhasználóazonosító) | {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éstő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 azt jelzi, hogy mikor történt az üzenet eredménye. 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ítva Kiürült |
leírás | A StatusCode sztringértékei. |
deviceId | Annak a felhőbő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őbő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 össze tudja hasonlítani a visszajelzést az eredeti üzenettel.
A visszajelzési üzenet törzse az alábbi példakódban jelenik meg:
[
{
"originalMessageId": "0987654321",
"enqueuedTimeUtc": "2015-07-28T16:24:48.789Z",
"statusCode": "Success",
"description": "Success",
"deviceId": "123",
"deviceGenerationId": "abcdefghijklmnopqrstuvwxyz"
},
{
...
},
...
]
Visszajelzés függőben a 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. Az eszköz visszajelzését kötegekben küldi el a rendszer. Egy keskeny, gyakran egy másodpercnél rövidebb ablak akkor fordulhat elő, ha 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 vár egy ideig, amíg a függőben lévő visszajelzések megérkeznek az eszköz törlése előtt. A kapcsolódó üzenetvisszajelzéseket az eszköz törlése után kell feltételezni.
Felhőből eszközre történő konfigurációs beállítások
Minden IoT Hub a következő konfigurációs lehetőségeket 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 az 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öz (legalább öt másodperc); alapértelmezett: 60 másodperc. |
A konfigurációs beállításokat az alábbi módok egyikével állíthatja be:
- Azure Portal: Az IoT Hub hubbeállításai alatt válassza a Beépített végpontok lehetőséget, és lépjen a Felhőből az eszközüzenetek szolgáltatásba. (A feedback.maxDeliveryCount és a feedback.lockDurationAsIso8601 tulajdonságok beállítása jelenleg nem támogatott a Azure Portal.)
Azure CLI: Használja az az iot hub update parancsot:
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 fogadásához használható SDK-kkal kapcsolatos információkért lásd: Azure IoT Hub SDK-k.
A felhőből az eszközre irányuló üzenetek fogadásának kipróbálásához tekintse meg a Felhőből eszközre küldése oktatóanyagot.