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:

Diagram przedstawiający wykres stanu cyklu życia komunikatów chmura-urządzenie.

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

    Ustawianie opcji konfiguracji obsługi komunikatów w chmurze na urządzenie w portalu

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