Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Komunikaty z chmury do urządzenia to jednokierunkowe powiadomienia z zaplecza rozwiązania do aplikacji urządzenia. Aby zapoznać się z omówieniem innych opcji chmury do urządzenia obsługiwanych przez usługę Azure IoT Hub, zobacz Wskazówki dotyczące komunikacji chmury z urządzeniami.
Uwaga
Funkcje opisane w tym artykule są dostępne tylko w warstwie Standardowa usługi IoT Hub. Aby uzyskać więcej informacji na temat warstw podstawowej i standardowej/bezpłatnej usługi IoT Hub, zobacz Wybieranie odpowiedniej warstwy i rozmiaru usługi IoT Hub dla rozwiązania.
Wysyłasz komunikaty z chmury do urządzenia za pośrednictwem punktu końcowego skierowanego do usługi, /messages/devicebound. Następnie urządzenie odbiera komunikaty za pośrednictwem punktu końcowego specyficznego dla urządzenia / devices/{deviceId}/messages/devicebound.
Aby kierować każdy komunikat z chmury do urządzenia na pojedyncze urządzenie, usługa IoT Hub ustawia właściwość to na /devices/{deviceId}/messages/devicebound.
Każda kolejka urządzeń przechowuje co najwyżej 50 komunikatów z chmury do urządzenia. Jeśli spróbujesz wysłać więcej komunikatów do tego samego urządzenia, wystąpi błąd.
W tym artykule omówiono pojęcia i procesy związane z komunikatami z chmury do urządzeń. Aby uzyskać wskazówki dotyczące tworzenia aplikacji obsługujących komunikaty z chmury do urządzenia, zobacz Wysyłanie i odbieranie komunikatów z chmury do urządzenia.
Cykl życia komunikatów z chmury do urządzenia
Aby zagwarantować co najmniej jednokrotne dostarczenie komunikatów, centrum IoT utrwala komunikaty z chmury do urządzenia w kolejkach dla każdego urządzenia. Urządzenia muszą jawnie potwierdzić ukończenie komunikatu, zanim centrum IoT usunie komunikat z kolejki. Takie podejście gwarantuje odporność na łączność i awarie urządzeń.
Wykres stanu cyklu życia jest wyświetlany na poniższym diagramie:
Gdy usługa IoT Hub wysyła komunikat do urządzenia, usługa ustawia stan komunikatu na Enqueued. Gdy wątek urządzenia jest gotowy do odbierania komunikatu, centrum IoT blokuje komunikat, ustawiając stan na Niewidoczny. Ten stan umożliwia innym wątkom na urządzeniu rozpoczęcie odbierania innych komunikatów. Gdy wątek urządzenia zakończy przetwarzanie komunikatu, powiadamia IoT hub, kończąc komunikat. Następnie centrum IoT ustawia stan na Ukończono.
Urządzenie może również:
Odrzuć komunikat, co powoduje, że centrum IoT ustawia go w stanie Martwa litera. Nie ma kolejki martwych listów do odzyskiwania tych wiadomości. Urządzenia łączące się za pośrednictwem protokołu transportu telemetrii kolejkowania komunikatów (MQTT) nie mogą odrzucać komunikatów z chmury do urządzenia.
Porzuć komunikat, co powoduje, że IoT hub umieszcza komunikat z powrotem w kolejce, a stan jest ustawiony na Enqueued. Urządzenia łączące się za pośrednictwem protokołu MQTT nie mogą zrezygnować z wiadomości chmura-do-urządzenia.
Wątek może nie przetworzyć komunikatu bez powiadamiania centrum IoT. W takim przypadku komunikaty automatycznie przechodzą ze stanu Niewidzialny z powrotem do stanu w kolejce po przekroczeniu limitu czasu widoczności (lub limitu czasu blokady). Długość tego limitu czasu wynosi minutę i nie można jej zmienić.
Właściwość maksymalnej liczby dostarczeń w centrum IoT określa maksymalną liczbę przypadków, w których komunikat może przechodzić między stanami W kolejce i niewidocznym. Po tej liczbie przejść centrum IoT ustawia stan komunikatu na Utracony list. Podobnie centrum IoT ustawia stan komunikatu na Dead lettered po upływie czasu wygaśnięcia.
Urządzenie zwykle kończy komunikat chmura-urządzenie, gdy utrata komunikatu nie ma wpływu na logikę aplikacji. Przykładem tego ukończenia może być to, że urządzenie utrwala zawartość komunikatu lokalnie lub pomyślnie wykonuje operację. Komunikat może również przenosić przejściowe informacje, których utrata nie wpłynie na funkcjonalność aplikacji. Czasami w przypadku długotrwałych zadań można wykonywać następujące czynności:
Ukończ komunikat chmura-do-urządzenia po zapisaniu opisu zadania w pamięci lokalnej.
Poinformuj zaplecze rozwiązania za pomocą co najmniej jednego komunikatu urządzenia do chmury na różnych etapach postępu zadania.
Wygaśnięcie wiadomości (czas życia)
Każdy komunikat chmura-urządzenie ma czas wygaśnięcia. Jedną z następujących opcji ustawia czas wygaśnięcia:
- Właściwość ExpiryTimeUtc w usłudze
- Centrum IoT przy użyciu domyślnego czasu wygaśnięcia określonego jako właściwość centrum IoT
Aby uzyskać więcej informacji na temat wygasania komunikatów, zobacz Opcje konfiguracji chmury do urządzenia.
Typowym sposobem korzystania z wygasania komunikatów i unikania wysyłania komunikatów do odłączonych urządzeń jest ustawienie krótkiego czasu życia. Takie podejście zapewnia taki sam wynik, jak utrzymywanie stanu połączenia urządzenia, ale jest bardziej wydajne. Gdy żądasz potwierdzenia wiadomości, IoT hub powiadamia cię, które urządzenia:
- Mogą odbierać komunikaty.
- Nie są w trybie online lub nie powiodły się.
Opinia o wiadomościach
Po wysłaniu komunikatu z chmury do urządzenia usługa może zażądać dostarczenia opinii na temat końcowego stanu komunikatu. Można skonfigurować informacje zwrotne dotyczące wiadomości, ustawiając właściwość aplikacji iothub-ack w wiadomości cloud-to-device na jedną z czterech następujących wartości:
| Wartość właściwości Ack | Zachowanie |
|---|---|
| żadne | Domyślne. Centrum IoT nie generuje komunikatu opinii. |
| pozytywny | Jeśli wiadomość z chmury do urządzenia osiągnie stan Ukończono, hub IoT generuje wiadomość zwrotną. |
| negatywny | Jeśli komunikat z chmury do urządzenia osiągnie stan niedostarczony, centrum IoT generuje komunikat zwrotny. |
| pełny | Centrum IoT generuje informację zwrotną w obu przypadkach. |
Jeśli wartość właściwości Ack jest ustawiona na pełną i nie otrzymasz wiadomości zwrotnej, oznacza to, że wiadomość zwrotna wygasła. Usługa nie może wiedzieć, co się stało z oryginalną wiadomością. W praktyce usługa powinna zapewnić, że może przetworzyć informacje zwrotne, zanim wygaśnie. Maksymalny czas wygaśnięcia wynosi dwa dni, co pozostawia czas na ponowne uruchomienie usługi, jeśli wystąpi awaria.
Jak wyjaśniono w punktach końcowych IoT Hub, centrum IoT dostarcza opinie za pośrednictwem usługowego punktu końcowego /messages/servicebound/feedback jako komunikaty. Semantyka odbierania opinii jest taka sama jak w przypadku komunikatów chmura-urządzenie. Jeśli to możliwe, opinie o wiadomościach są grupowane w jednym komunikacie o następującym formacie:
| Nieruchomość | Opis |
|---|---|
| EnqueuedTime | Sygnatura czasowa wskazująca, kiedy centrum otrzymało komunikat o opinii. |
| Identyfikator użytkownika | {iot hub name} |
| Typ zawartości | application/vnd.microsoft.iothub.feedback.json |
System wysyła opinię, gdy partia osiągnie 64 komunikaty lub w ciągu 15 sekund od ostatniego wysłania, w zależności od tego, co nastąpi wcześniej.
Treść jest serializowaną tablicą rekordów w formacie JSON, z których każda ma następujące właściwości:
| Nieruchomość | Opis |
|---|---|
| enqueuedTimeUtc | Sygnatura czasowa wskazująca, kiedy wystąpił wynik komunikatu. Na przykład znacznik czasu wskazujący, kiedy węzeł odebrał wiadomość zwrotną lub oryginalna wiadomość wygasła. |
| originalMessageId | MessageId komunikatu chmura-urządzenie, do którego odnoszą się te informacje zwrotne. |
| kod stanu | Wymagany ciąg znaków, używany przez centrum IoT do generowania komunikatów zwrotnych: Powodzenie Wygasła PrzekroczonoLimitDostaw Odrzucone Wyczyszczone |
| description | Wartości ciągu dla statusCode. |
| Identyfikator urządzenia (deviceId) | Identyfikator DeviceId urządzenia docelowego komunikatu chmura-urządzenie, do którego odnosi się ta część opinii. |
| identyfikatorGeneracjiUrządzenia | Identyfikator DeviceGenerationId dla urządzenia docelowego powiązanego z komunikatem z chmury do urządzenia, którego dotyczy ta informacja zwrotna. |
Usługa musi określić identyfikator MessageId , aby komunikat z chmury do urządzenia mógł skorelować swoją opinię z oryginalną wiadomością.
Treść wiadomości zwrotnej jest wyświetlana w poniższym przykładzie kodu:
[
{
"originalMessageId": "0987654321",
"enqueuedTimeUtc": "2015-07-28T16:24:48.789Z",
"statusCode": "Success",
"description": "Success",
"deviceId": "123",
"deviceGenerationId": "abcdefghijklmnopqrstuvwxyz"
},
{
...
},
...
]
Oczekiwanie na opinię dotyczącą usuniętych urządzeń
Po usunięciu urządzenia wszystkie oczekujące informacje zwrotne również zostaną usunięte. Informacja zwrotna o urządzeniu jest wysyłana w partiach. Wąskie okno, często mniej niż jedna sekunda, może wystąpić między potwierdzeniem otrzymania komunikatu przez urządzenie a przygotowaniem następnej partii opinii. Jeśli urządzenie zostanie usunięte w tym wąskim oknie, opinia nie zostanie wykonana.
To zachowanie można rozwiązać, czekając na czas oczekiwania na nadejście opinii przed usunięciem urządzenia. Po usunięciu urządzenia należy uznać, że informacja zwrotna dotycząca powiązanych wiadomości zostaje utracona.
Opcje konfiguracji chmury do urządzenia
Każde centrum IoT udostępnia następujące opcje konfiguracji obsługi komunikatów z chmury do urządzenia:
| Nieruchomość | Opis | Zakres i wartość domyślna |
|---|---|---|
| domyślneTtlJakoISO8601 | Domyślny TTL dla komunikatów z chmury do urządzenia | ISO_8601 interwał do dwóch dni (co najmniej jedna minuta); wartość domyślna: jedna godzina |
| maksymalnaLiczbaDostaw | Maksymalna liczba dostaw dla kolejek za urządzenie w systemie chmura-urządzenie | od 1 do 100; wartość domyślna: 10 |
| feedback.ttlAsIso8601 | Przechowywanie komunikatów zwrotnych powiązanych z usługą | ISO_8601 interwał do dwóch dni (co najmniej jedna minuta); wartość domyślna: jedna godzina |
| feedback.maxDeliveryCount | Maksymalna liczba dostarczeń dla kolejki zwrotnej | od 1 do 100; wartość domyślna: 10 |
| feedback.lockDurationAsIso8601 | Blokowanie czasu trwania kolejki opinii | ISO_8601 interwał od 5 do 300 sekund (co najmniej pięć sekund); wartość domyślna: 60 sekund. |
Opcje konfiguracji można ustawić w witrynie Azure Portal lub w interfejsie wiersza polecenia platformy Azure:
Azure portal: W ustawieniach centrali IoT hub wybierz Wbudowane punkty końcowe i przejdź do komunikatów z chmury do urządzenia. (Ustawienie właściwości feedback.maxDeliveryCount lub feedback.lockDurationAsIso8601 nie jest obecnie obsługiwane w witrynie Azure Portal).
Azure CLI: użyj polecenia az iot hub update
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
Następne kroki
Aby uzyskać informacje na temat zestawów SDK, których można używać do obsługi komunikatów z chmury do urządzenia, zobacz Zestawy SDK usługi Azure IoT Hub.
Aby uzyskać wskazówki dotyczące tworzenia aplikacji obsługujących komunikaty z chmury do urządzenia, zobacz Wysyłanie i odbieranie komunikatów z chmury do urządzenia.