Megosztás a következőn keresztül:


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.

Megjegyzés

A cikkben ismertetett funkciók csak az IoT Hub standard szintjén érhetők el. Az alapszintű és standard/ingyenes IoT Hub-szintekkel kapcsolatban további információkért lásd Válassza ki a megoldása számára megfelelő IoT Hub-szintet és -méretet.

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 legalább egyszeri biztosítása érdekében az IoT Hub eszközenkénti üzenetsorokban tárolja 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:

A felhőből az eszközre irányuló üzenetek életciklus-állapotdiagramját bemutató ábra.

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 . Nincs halott levelek sora ezeknek az üzeneteknek a visszaállításához. 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 el az üzenetet, ami miatt az IoT Hub visszaállítja az üzenetet az üzenetsorba, az állapota pedig újra Enqueued lesz á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 egy láthatósági időtúllépés (vagy zárolási időtúllépés) után. Ennek az időtúllépésnek a hossza 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 egy üzenet állapotát halott levélként a lejárati idő után állítja be.

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őrzi az üzenet tartalmát, vagy sikeresen végrehajt 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őrzi 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. Az alábbi beállítások bármelyike beállítja a lejárati időt:

  • A szolgáltatás ExpiryTimeUtc tulajdonsága
  • Az IoT Hub az alapértelmezett TTL (élettartam) értéket használja, amely IoT Hub tulajdonságként van megadva.

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 nem csatlakoztatott eszközökre való küldésének elkerülésére gyakran rövid élettartamot állítanak be. 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, hogy mely eszközök:

  • Képesek üzeneteket fogadni.
  • Nincs online, vagy meghibásodott.

Ü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 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 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.

Az IoT Hub-végpontok magyarázata 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 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 a központ mikor kapta meg a visszajelzési üzenetet.
UserId {iot hub name}
Tartalomtípus 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.
eredeti üzenetazonosító A cloud-to-device üzenet MessageId azonosítója, amelyhez ez a visszajelzés kapcsolódik.
állapotkód Egy szükséges sztring, amelyet az IoT Hub használ visszajelzési üzenetek létrehozásakor:
Siker
Lejárt
KézbesítésiSzámTúllépve
Elutasította
Kiürítve
leírás A StatusCode sztringértékei.
eszközazonosító 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.
eszközGenerációAzonosító 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 élettartam ISO 8601 formátumban) 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
maximális kézbesítési szám 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 vagy a feedback.lockDurationAsIso8601 tulajdonság beállítása jelenleg nem támogatott az Azure Portalon.)

    Konfigurációs beállítások megadása a felhőből az eszközre irányuló üzenetküldéshez a portálon

  • 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 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.