Omówienie komunikatów z chmury do urządzenia z centrum IoT Hub
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 usługi IoT Hub dla rozwiązania.
Komunikaty z chmury do urządzenia są wysyłane za pośrednictwem punktu końcowego dostępnego dla 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 jednym urządzeniu, usługa IoT Hub ustawia właściwość 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 dostarczanie komunikatów, centrum IoT będzie utrwalać komunikaty z chmury do urządzenia w kolejkach poszczególnych urządzeń. 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 centrum IoT Hub przez ukończenie komunikatu. Następnie centrum IoT ustawia stan na Ukończono.
Urządzenie może również:
Odrzuć komunikat, co powoduje, że centrum IoT ma ustawić go na stan Utracony. Nie ma kolejki utraconych komunikatów do odzyskania tych komunikatów. 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.
Porzucanie komunikatu, co powoduje, że centrum IoT hub umieścić komunikat z powrotem w kolejce, a stan jest ustawiony na Enqueued. Urządzenia łączące się za pośrednictwem protokołu MQTT nie mogą porzucić komunikatów chmura-urządzenie.
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 przekroczeniu limitu czasu blokady). Długość tego limitu czasu wynosi minutę i nie można jej zmienić.
Właściwość maksymalnej liczby dostarczania w centrum IoT określa maksymalną liczbę przypadków przejścia komunikatu między stanami w kolejce i niewidocznymi . 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, gdy urządzenie utrwali lokalnie zawartość komunikatu lub pomyślnie wykonało 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 z chmury do urządzenia po utrwałniu opisu zadania w magazynie lokalnym.
Powiadom zaplecze rozwiązania za pomocą co najmniej jednego komunikatu urządzenie-chmura na różnych etapach postępu zadania.
Wygaśnięcie wiadomości (czas wygaśnięcia)
Każdy komunikat chmura-urządzenie ma czas wygaśnięcia. Tym razem jest ustawiana przez jedną z następujących opcji:
- 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 na wartości na żywo . Takie podejście zapewnia taki sam wynik, jak utrzymywanie stanu połączenia urządzenia, ale jest bardziej wydajne. Podczas żądania potwierdzenia wiadomości centrum IoT hub powiadamia o tym, które urządzenia są:
- Możliwość odbierania komunikatów.
- 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. Opinię o wiadomościach można skonfigurować, ustawiając właściwość aplikacji iothub-ack w komunikacie cloud-to-device, który jest wysyłany do jednej z następujących czterech wartości:
Wartość właściwości Ack | Zachowanie |
---|---|
Brak | Domyślne. Centrum IoT nie generuje komunikatu opinii. |
positive | Jeśli komunikat chmura-urządzenie osiągnie stan Ukończono , centrum IoT generuje komunikat opinii. |
negative | Jeśli komunikat z chmury do urządzenia osiągnie stan Utracony , centrum IoT generuje komunikat z opiniami. |
pełne | Centrum IoT generuje komunikat opinii 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 komunikat z informacją zwrotną wygasł. Usługa nie może wiedzieć, co się stało z oryginalną wiadomością. W praktyce usługa powinna zapewnić, że może przetworzyć opinię przed wygaśnięciem. Maksymalny czas wygaśnięcia wynosi dwa dni, co pozostawia czas na ponowne uruchomienie usługi, jeśli wystąpi awaria.
Zgodnie z wyjaśnieniem w temacie Endpoints, centrum IoT hub dostarcza opinie za pośrednictwem punktu końcowego dostępnego z usługą /messages/servicebound/feedback jako komunikatów. Semantyka odbierania opinii jest taka sama jak w przypadku komunikatów chmura-urządzenie. Jeśli to możliwe, opinia o wiadomościach jest wsadowa w jednym komunikacie o następującym formacie:
Właściwości | opis |
---|---|
EnqueuedTime | Sygnatura czasowa wskazująca, kiedy wiadomość zwrotna została odebrana przez centrum. |
Identyfikator użytkownika | {iot hub name} |
Typ zawartości | application/vnd.microsoft.iothub.feedback.json |
System wyśle 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:
Właściwości | opis |
---|---|
enqueuedTimeUtc | Sygnatura czasowa wskazująca, kiedy wystąpił wynik komunikatu. Na przykład sygnatura czasowa wskazująca, kiedy centrum odebrało komunikat opinii lub oryginalną wiadomość wygasła. |
originalMessageId | MessageId komunikatu chmura-urządzenie, do którego odnoszą się te informacje zwrotne. |
statusCode | Wymagany ciąg używany w komunikatach opinii generowanych przez centrum IoT: Sukces Wygasła DeliveryCountExceeded Odrzucone Usunięte |
opis | Wartości ciągu dla statusCode. |
deviceId | Identyfikator DeviceId urządzenia docelowego komunikatu chmura-urządzenie, do którego odnosi się ta część opinii. |
deviceGenerationId | Identyfikator DeviceGenerationId urządzenia docelowego komunikatu z chmury do urządzenia, do którego odnosi się ta część opinii. |
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 opinie również zostaną usunięte. Opinia 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 przyjąć, że opinia dotycząca powiązanych wiadomości powinna zostać 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:
Właściwości | opis | Zakres i wartość domyślna |
---|---|---|
defaultTtlAsIso8601 | Domyślny czas wygaśnięcia komunikatów z chmury do urządzenia | ISO_8601 interwał do dwóch dni (co najmniej jedna minuta); wartość domyślna: jedna godzina |
maxDeliveryCount | Maksymalna liczba dostaw dla kolejek z chmury do urządzenia | 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 dostaw dla kolejki opinii | 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 obszarze Ustawienia centrum w centrum IoT hub wybierz pozycję Wbudowane punkty końcowe i przejdź do pozycji Chmura do obsługi komunikatów urządzenia. (Ustawienie właściwości feedback.maxDeliveryCount i feedback.lockDurationAsIso8601 nie jest obecnie obsługiwane w witrynie Azure Portal).
Interfejs wiersza polecenia platformy Azure: 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.