Поделиться через


Отправка и получение сообщений из облака на устройство

Центр Интернета вещей Azure — это полностью управляемая служба, которая обеспечивает двунаправленное взаимодействие, включая сообщения из серверной части решения на миллионы устройств.

В этой статье описывается, как использовать пакеты SDK Для Интернета вещей Azure для создания следующих типов приложений:

  • Приложения устройств, получающие и обрабатывающие сообщения из очереди обмена сообщениями Центр Интернета вещей.

  • Серверные приложения, которые отправляют сообщения из облака на устройство на одно устройство через очередь обмена сообщениями Центр Интернета вещей.

Эта статья предназначена для дополнения примеров пакета SDK для запуска, на которые ссылается эта статья.

Примечание.

Функции, описанные в этой статье, доступны только на стандартном уровне Центра Интернета вещей. Дополнительные сведения о базовых и бесплатных уровнях Центр Интернета вещей см. в разделе "Выбор подходящего уровня Центр Интернета вещей" для решения.

Обзор

Для получения сообщений из облака на устройство приложение должно подключиться к Центр Интернета вещей, а затем настроить обработчик сообщений для обработки входящих сообщений. Пакеты SDK для устройств Центр Интернета вещей Azure предоставляют классы и методы, которые устройство может использовать для получения и обработки сообщений от службы. В этой статье рассматриваются ключевые элементы любого приложения устройства, которое получает сообщения, в том числе:

  • Объявление клиентского объекта устройства
  • Подключение к Центру Интернета вещей
  • Получение сообщений из очереди сообщений Центр Интернета вещей
  • Обработка сообщения и отправка подтверждения обратно в Центр Интернета вещей
  • Настройка политики повторных попыток получения сообщения

Чтобы серверное приложение отправляло сообщения из облака на устройство, оно должно подключаться к Центр Интернета вещей и отправлять сообщения через очередь сообщений Центр Интернета вещей. Пакеты SDK службы Центр Интернета вещей Azure предоставляют классы и методы, которые приложение может использовать для отправки сообщений на устройства. В этой статье рассматриваются ключевые элементы любого приложения, которое отправляет сообщения на устройства, в том числе:

  • Объявление объекта клиента службы
  • Подключение к Центру Интернета вещей
  • Создание и отправка сообщения
  • Получение подтверждений доставки
  • Настройка политики повторных попыток отправки сообщения

Общие сведения о очереди сообщений

Чтобы понять обмен сообщениями между облаком и устройствами, важно понять, как работают очереди сообщений устройства Центр Интернета вещей.

Сообщения из серверного приложения решения в устройство Интернета вещей направляются через Центр Интернета вещей. Прямой обмен сообщениями между серверным приложением решения и целевым устройством отсутствует. Центр Интернета вещей помещает входящие сообщения в очередь сообщений, готовые к скачиванию целевыми устройствами Интернета вещей.

Чтобы гарантировать по крайней мере однократную доставку сообщений, Центр Интернета вещей сохраняет сообщения из облака на устройство в очереди устройств. Устройства должны явно подтвердить завершение сообщения, прежде чем Центр Интернета вещей удаляет сообщение из очереди. Этот способ гарантирует устойчивость к сбоям подключения и ошибкам устройств.

Когда Центр Интернета вещей помещает сообщение в очередь сообщений устройства, оно задает состояние сообщения в enqueued. Когда поток устройства принимает сообщение из очереди, Центр Интернета вещей блокирует сообщение, задав состояние сообщения невидимым. Это состояние предотвращает обработку того же сообщения другими потоками на устройстве. Когда поток устройства успешно завершает обработку сообщения, он уведомляет Центр Интернета вещей, а затем Центр Интернета вещей задает состояние сообщения завершенным.

Приложение устройства, которое успешно получает и обрабатывает сообщение, показано, как завершить сообщение. Однако при необходимости устройство может также:

  • Отклонить сообщение, которое приводит к тому, что Центр Интернета вещей задать для него состояние "Мертвый". Устройства, подключающиеся через протокол транспорта телеметрии очереди сообщений (MQTT), не могут отклонять сообщения из облака на устройство.
  • Откложите сообщение, которое приводит к тому, что Центр Интернета вещей вернуть сообщение в очередь, при этом состояние сообщения задано как Enqueued. Устройства, подключающиеся через протокол MQTT, не могут отказаться от сообщений из облака на устройство.

Дополнительные сведения о том, как Центр Интернета вещей обрабатывает сообщения из облака на устройство, включая сведения об их жизненном цикле, см. в этой статье.

Получение сообщений из облака на устройство

В этом разделе описывается, как получать сообщения из облака на устройство с помощью класса DeviceClient в пакете SDK Интернета вещей Azure для .NET.

Существует два варианта, которые клиентское приложение устройства может использовать для получения сообщений:

  • Опрос. Приложение устройства проверяет наличие новых сообщений Центр Интернета вещей с помощью цикла кода (например, while цикла или for цикла). Цикл выполняется постоянно, проверяя наличие сообщений.
  • Обратный вызов: приложение устройства настраивает асинхронный метод обработчика сообщений, который вызывается немедленно при поступлении сообщения.

Объявление объекта DeviceClient

DeviceClient включает методы и свойства, необходимые для получения сообщений от Центр Интернета вещей.

Например:

static DeviceClient deviceClient;

Укажите параметры подключения

Укажите Центр Интернета вещей основной строка подключения и идентификатор DeviceClient устройства с помощью метода CreateFromConnectionString. Помимо необходимых Центр Интернета вещей первичных строка подключения метод CreateFromConnectionString можно перегружать, чтобы включить следующие необязательные параметры:

  • transportType — транспортный протокол: варианты HTTP версии 1, AMQP или MQTT. Значение по умолчанию — AMQP. Чтобы просмотреть все доступные значения, см. раздел "Enum TransportType".
  • transportSettings — интерфейс, используемый для определения различных параметров, относящихся к транспорту, и DeviceClient ModuleClient. Дополнительные сведения см. в разделе "Интерфейс ITransportSettings".
  • ClientOptions — Параметры, разрешающие настройку экземпляра клиента устройства или модуля во время инициализации.

В этом примере вызывается CreateFromConnectionString определение DeviceClient параметров центра Интернета вещей и идентификатора устройства.

static string connectionString = "{your IoT hub connection string}";
static string deviceID = "{your device ID}";
deviceClient = DeviceClient.CreateFromConnectionString(connectionString,deviceID);

Опросы

Опрос использует ReceiveAsync для проверки сообщений.

Вызов ReceiveAsync может принимать следующие формы:

  • ReceiveAsync() — дождитесь истечения времени ожидания по умолчанию для сообщения, прежде чем продолжить.
  • ReceiveAsync (Timespan) — получение сообщения из очереди устройства с помощью определенного времени ожидания.
  • ReceiveAsync (CancellationToken) — получение сообщения из очереди устройства с помощью маркера отмены. При использовании маркера отмены период времени ожидания по умолчанию не используется.

При использовании типа транспорта HTTP 1 вместо MQTT или AMQP ReceiveAsync метод возвращается немедленно. Поддерживаемый шаблон для сообщений между облаком и устройствами с HTTP 1 периодически подключены устройства, которые редко проверяют сообщения (как минимум каждые 25 минут). Выдача большего количества HTTP 1 получает результаты Центр Интернета вещей регулирование запросов. Дополнительные сведения о различиях между поддержкой MQTT, AMQP и HTTP 1 см . в руководстве по обмену данными между облаком и устройством и выборе протокола связи.

Метод CompleteAsync

После получения сообщения приложение устройства вызывает метод CompleteAsync, чтобы уведомить Центр Интернета вещей, что сообщение успешно обработано и что сообщение можно безопасно удалить из очереди устройств Центр Интернета вещей. Устройство должно вызывать этот метод, когда его обработка успешно завершается независимо от используемого транспортного протокола.

Отказ от сообщения, отклонение или истечение времени ожидания

С протоколами AMQP и HTTP версии 1, но не протоколом MQTT, устройство также может:

  • Отмена сообщения путем вызова AbandonAsync. Это приведет к Центр Интернета вещей сохранении сообщения в очереди устройств для будущего потребления.
  • Отклонить сообщение путем вызова RejectAsync. Это окончательно удаляет сообщение из очереди устройства.

Если по какой-либо причине устройство не сможет завершить обработку сообщения, отказаться от него или отклонить его, Центр Интернета вещей после фиксированного периода ожидания снова поместит сообщение в очередь для доставки. Поэтому логика обработки сообщений в приложении устройства должна быть идемпотентной. Это обеспечит одинаковый результат при многократном получении одного и того же сообщения.

Дополнительные сведения о том, как Центр Интернета вещей обрабатывает сообщения из облака на устройство, включая сведения об их жизненном цикле, см. в этой статье.

Цикл опроса

При опросе приложение использует цикл кода, который ReceiveAsync вызывает метод многократно, чтобы проверить наличие новых сообщений до остановки.

Если используется ReceiveAsync с значением времени ожидания или временем ожидания по умолчанию, в цикле каждый вызов ожидает ReceiveAsync указанного периода ожидания времени ожидания. Если ReceiveAsync время ожидания истекает, null возвращается значение, и цикл продолжается.

При получении сообщения объект Task возвращается ReceiveAsync в CompleteAsync. Вызов, который CompleteAsync уведомляет Центр Интернета вещей удалить указанное сообщение из очереди сообщений на Task основе параметра.

В этом примере цикл вызывается ReceiveAsync до получения сообщения или цикла опроса.

static bool stopPolling = false;

while (!stopPolling)
{
   // Check for a message. Wait for the default DeviceClient timeout period.
   using Message receivedMessage = await _deviceClient.ReceiveAsync();

   // Continue if no message was received
   if (receivedMessage == null)
   {
      continue;
   }
   else  // A message was received
   {
      // Print the message received
      Console.WriteLine($"{DateTime.Now}> Polling using ReceiveAsync() - received message with Id={receivedMessage.MessageId}");
      PrintMessage(receivedMessage);

      // Notify IoT Hub that the message was received. IoT Hub will delete the message from the message queue.
      await _deviceClient.CompleteAsync(receivedMessage);
      Console.WriteLine($"{DateTime.Now}> Completed C2D message with Id={receivedMessage.MessageId}.");
   }

   // Check to see if polling loop should end
   stopPolling = ShouldPollingstop ();
}

Обратный вызов

Чтобы получать сообщения обратного вызова из облака на устройство в приложение устройства, приложение должно подключиться к Центр Интернета вещей и настроить прослушиватель обратного вызова для обработки входящих сообщений. Входящие сообщения на устройство получаются из очереди сообщений Центр Интернета вещей.

С помощью обратного вызова приложение устройства настраивает метод обработчика сообщений с помощью SetReceiveMessageHandlerAsync. Обработчик сообщений вызывается, а затем получается сообщение. Создание метода обратного вызова для получения сообщений удаляет необходимость непрерывного опроса полученных сообщений.

Обратный вызов доступен только с помощью следующих протоколов:

  • Mqtt
  • Mqtt_WebSocket_Only
  • Mqtt_Tcp_Only
  • Amqp
  • Amqp_WebSocket_Only
  • Amqp_Tcp_only

Параметр Http1 протокола не поддерживает обратные вызовы, так как методы ПАКЕТА SDK должны будет провести опрос полученных сообщений в любом случае, что побеждает принцип обратного вызова.

В этом примере SetReceiveMessageHandlerAsync настраивается метод обработчика обратного вызова с именем OnC2dMessageReceivedAsync, который вызывается при каждом получении сообщения.

// Subscribe to receive C2D messages through a callback (which isn't supported over HTTP).
await deviceClient.SetReceiveMessageHandlerAsync(OnC2dMessageReceivedAsync, deviceClient);
Console.WriteLine($"\n{DateTime.Now}> Subscribed to receive C2D messages over callback.");

Политика повторных попыток получения сообщения

Политику повтора сообщения клиента устройства можно определить с помощью DeviceClient.SetRetryPolicy.

Время ожидания повтора сообщения хранится в свойстве DeviceClient.OperationTimeoutInMilliseconds .

Пример сообщения получения пакета SDK

Пакет SDK для .NET/C# содержит пример получения сообщений, включающий методы получения сообщений, описанные в этом разделе.

Отправка сообщений из облака на устройства с помощью Центра Интернета вещей (Node)

В этом разделе описывается важный код для отправки сообщения из серверного приложения решения на устройство Интернета вещей с помощью класса ServiceClient в пакете SDK Для Интернета вещей Azure для .NET. Как упоминалось ранее, серверное приложение решения подключается к Центр Интернета вещей и сообщения отправляются в Центр Интернета вещей закодированные с помощью целевого устройства. Центр Интернета вещей хранит входящие сообщения в очередь сообщений и сообщения доставляются из очереди сообщений Центр Интернета вещей на целевое устройство.

Серверное приложение решения также может запрашивать и получать отзывы о доставке сообщения, отправленные в Центр Интернета вещей, предназначенные для доставки устройств через очередь сообщений.

Объявление объекта ServiceClient

ServiceClient включает методы и свойства, необходимые для отправки сообщений из приложения через Центр Интернета вещей на устройство.

static ServiceClient serviceClient;

Укажите строка подключения

Укажите основной Центр Интернета вещей строка подключения ServiceClient с помощью метода CreateFromConnectionString. Помимо необходимых Центр Интернета вещей первичных строка подключения метод CreateFromConnectionString можно перегружать, чтобы включить следующие необязательные параметры:

  • transportType - Amqp или Amqp_WebSocket_Only.
  • transportSettings — параметры ПРОКСИ-сервера AMQP и HTTP для клиента службы.
  • ServiceClientOptions — Параметры, разрешающие настройку экземпляра клиента службы во время инициализации. Дополнительные сведения см. в разделе ServiceClientOptions.

В этом примере создается ServiceClient объект с помощью Центр Интернета вещей строка подключения.

static string connectionString = "{your iot hub connection string}";
serviceClient = ServiceClient.CreateFromConnectionString(connectionString);

Отправка асинхронного сообщения об использовании облака на устройство

Используйте sendAsync для отправки асинхронного сообщения из приложения через облако (Центр Интернета вещей) на устройство. Вызов выполняется с помощью протокола AMQP.

sendAsync использует следующие параметры:

  • deviceID — строковый идентификатор целевого устройства.
  • message — сообщение об облачном устройстве. Сообщение имеет тип Message и может быть отформатировано соответствующим образом.
  • timeout— необязательное значение времени ожидания. Значение по умолчанию составляет одну минуту, если не указано.

В этом примере отправляется тестовое сообщение на целевое устройство со значением времени ожидания 10 секунд.

string targetDevice = "Device-1";
static readonly TimeSpan operationTimeout = TimeSpan.FromSeconds(10);
var commandMessage = new
Message(Encoding.ASCII.GetBytes("Cloud to device message."));
await serviceClient.SendAsync(targetDevice, commandMessage, operationTimeout);

Получение подтверждений доставки

Программа отправки может запрашивать подтверждения доставки (или истечения срока действия) из Центр Интернета вещей для каждого сообщения из облака на устройство. Этот параметр позволяет программе отправки использовать логику информирования, повтора или компенсации. Полное описание операций обратной связи и свойств сообщений описано в отзыве сообщения.

Чтобы получить отзыв о доставке сообщений, выполните следующее:

  • feedbackReceiver Создание объекта
  • Отправка сообщений с помощью Ack параметра
  • Ожидание получения отзывов

Создание объекта feedbackReceiver

Вызовите GetFeedbackReceiver , чтобы создать объект FeedbackReceiver . FeedbackReceiver содержит методы, которые службы могут использовать для выполнения операций получения отзывов.

var feedbackReceiver = serviceClient.GetFeedbackReceiver();

Отправка сообщений с помощью параметра Ack

Каждое сообщение должно содержать значение для свойства подтверждения доставки Ack для получения отзывов о доставке. Свойство Ack может быть одним из следующих значений:

  • none (по умолчанию): сообщение обратной связи не создается.

  • Positive: получает сообщение обратной связи, если сообщение было завершено.

  • Negative: получает сообщение обратной связи, если сообщение истекло (или максимальное число доставки было достигнуто) без завершения устройством.

  • Full: обратная связь для обоих Positive и Negative результатов.

В этом примере Ack для свойства задано Fullзначение , запрашивающее обратную связь о доставке положительных или отрицательных сообщений для одного сообщения.

var commandMessage = new
Message(Encoding.ASCII.GetBytes("Cloud to device message."));
commandMessage.Ack = DeliveryAcknowledgement.Full;
await serviceClient.SendAsync(targetDevice, commandMessage);

Ожидание получения отзывов

CancellationTokenОпределение . Затем в цикле вызовите ReceiveAsync повторно, проверяя наличие сообщений обратной связи о доставке. Каждый вызов ожидает ReceiveAsync периода ожидания времени ожидания, определенного ServiceClient для объекта.

  • ReceiveAsync Если истекает время ожидания без получения сообщения, ReceiveAsync возвращается null и цикл продолжается.
  • Если сообщение обратной связи получено, объект Task возвращается ReceiveAsync в CompleteAsync вместе с маркером отмены. Вызов CompleteAsync для удаления указанного отправленного сообщения из очереди сообщений на Task основе параметра.
  • При необходимости код получения может вызвать AbandonAsync , чтобы отправить сообщение обратно в очередь.
var feedbackReceiver = serviceClient.GetFeedbackReceiver();
// Define the cancellation token.
CancellationTokenSource source = new CancellationTokenSource();
CancellationToken token = source.Token;
// Call ReceiveAsync, passing the token. Wait for the timout period.
var feedbackBatch = await feedbackReceiver.ReceiveAsync(token);
if (feedbackBatch == null) continue;

В этом примере показан метод, включающий эти шаги.

private async static void ReceiveFeedbackAsync()
{
      var feedbackReceiver = serviceClient.GetFeedbackReceiver();

      Console.WriteLine("\nReceiving c2d feedback from service");
      while (true)
      {
         // Check for messages, wait for the timeout period.
         var feedbackBatch = await feedbackReceiver.ReceiveAsync();
         // Continue the loop if null is received after a timeout.
         if (feedbackBatch == null) continue;

         Console.ForegroundColor = ConsoleColor.Yellow;
         Console.WriteLine("Received feedback: {0}",
            string.Join(", ", feedbackBatch.Records.Select(f => f.StatusCode)));
         Console.ResetColor();

         await feedbackReceiver.CompleteAsync(feedbackBatch);
      }
   }

Обратите внимание, что этот шаблон получения отзывов аналогичен шаблону, используемому для получения сообщений из облака в устройство.

Повторное подключение клиента службы

При обнаружении исключения клиент службы ретранслирует эти сведения в вызывающее приложение. На этом этапе рекомендуется проверить сведения об исключении и выполнить необходимые действия.

Например:

  • Если это сетевое исключение, можно повторить операцию.
  • Если это исключение безопасности (несанкционированное исключение), проверьте свои учетные данные и убедитесь, что они актуальны.
  • Если это превышено ограничение или квота, отслеживайте и/или изменяйте частоту отправки запросов или обновите единицу масштабирования экземпляра концентратора. Дополнительные сведения см. в Центр Интернета вещей квотах и регулировании.

Политика повторных попыток отправки сообщения

ServiceClient Политика повторных попыток сообщения может быть определена с помощью ServiceClient.SetRetryPolicy.

Пример сообщения отправки пакета SDK

Пакет SDK для .NET/C# содержит пример клиента службы, который включает методы отправки сообщений, описанные в этом разделе.

Получение сообщений из облака на устройство

В этом разделе описывается, как получать сообщения из облака на устройство с помощью класса DeviceClient из пакета SDK Интернета вещей Azure для Java.

Чтобы приложение устройства на основе Java получало сообщения из облака на устройство, оно должно подключаться к Центр Интернета вещей, а затем настроить прослушиватель обратного вызова и обработчик сообщений для обработки входящих сообщений из Центр Интернета вещей. Приложение устройства также должно иметь возможность обнаруживать и обрабатывать отключения, если подключение сообщения к устройству Центр Интернета вещей нарушено.

Импорт библиотек пакета SDK Java для Интернета вещей Azure

В коде, на который ссылается эта статья, используются эти библиотеки SDK.

import com.microsoft.azure.sdk.iot.device.*;
import com.microsoft.azure.sdk.iot.device.exceptions.IotHubClientException;
import com.microsoft.azure.sdk.iot.device.transport.IotHubConnectionStatus;

Объявление объекта DeviceClient

Для создания экземпляра объекта DeviceClient требуются следующие параметры:

  • connString — строка подключения устройства Интернета вещей. Строка подключения — это набор пар "ключ-значение", разделенных ";", с ключами и значениями, разделенными "=". Он должен содержать значения для этих ключей: HostName, DeviceId, and SharedAccessKey
  • Транспортный протокол . Подключение DeviceClient может использовать один из следующих транспортных протоколов IoTHubClientProtocol . AMQP является наиболее универсальным, позволяет часто проверять сообщения и позволяет отклонять и отменять сообщения. MQTT не поддерживает отклонение сообщений или отказ от методов:
    • AMQPS
    • AMQPS_WS
    • HTTPS
    • MQTT
    • MQTT_WS

Например:

static string connectionString = "{a device connection string}";
static protocol = IotHubClientProtocol.AMQPS;
DeviceClient client = new DeviceClient(connectionString, protocol);

Установка метода обратного вызова сообщения

Используйте метод setMessageCallback, чтобы определить метод обработчика сообщений, который уведомляется при получении сообщения от Центр Интернета вещей.

setMessageCallback включает следующие параметры:

  • callback — имя метода обратного вызова. Может иметь значение null.
  • context— необязательный контекст типаobject. Используйте null , если не указано.

В этом примере callback метод с именем MessageCallback без параметра контекста передается setMessageCallbackв .

client.setMessageCallback(new MessageCallback(), null);

Создание обработчика обратного вызова сообщения

Обработчик обратного вызова получает и обрабатывает входящее сообщение, переданное из очереди сообщений Центр Интернета вещей.

В этом примере обработчик сообщений обрабатывает входящее сообщение, а затем возвращает IotHubMessageResult.COMPLETE. Возвращаемое IotHubMessageResult.COMPLETE значение уведомляет Центр Интернета вещей, что сообщение успешно обработано и что сообщение можно безопасно удалить из очереди устройства. Устройство должно вернуться IotHubMessageResult.COMPLETE после успешной обработки, уведомляя Центр Интернета вещей, что сообщение должно быть удалено из очереди сообщений независимо от используемого протокола.

  protected static class MessageCallback implements com.microsoft.azure.sdk.iot.device.MessageCallback
  {
      public IotHubMessageResult onCloudToDeviceMessageReceived(Message msg, Object context)
      {
          System.out.println(
                  "Received message with content: " + new String(msg.getBytes(), Message.DEFAULT_IOTHUB_MESSAGE_CHARSET));
          // Notify IoT Hub that the message
          return IotHubMessageResult.COMPLETE;
      }
  }

Параметры отказа от сообщений и отклонений

Хотя большое количество входящих сообщений на устройство должно быть успешно получено и в результате IotHubMessageResult.COMPLETEможет потребоваться отказаться от сообщения или отклонить его.

  • С помощью AMQP и HTTPS, но не MQTT, приложение может:
    • IotHubMessageResult.ABANDON сообщение. Центр Интернета вещей повторно пересылает его и отправляет его снова позже.
    • IotHubMessageResult.REJECT сообщение. Центр Интернета вещей не пересылает сообщение и окончательно удаляет сообщение из очереди сообщений.
  • Клиенты, использующие MQTT или не могутABANDON, или MQTT_WS REJECT сообщения.

Если по какой-либо причине устройство не сможет завершить обработку сообщения, отказаться от него или отклонить его, Центр Интернета вещей после фиксированного периода ожидания снова поместит сообщение в очередь для доставки. Поэтому логика обработки сообщений в приложении устройства должна быть идемпотентной. Это обеспечит одинаковый результат при многократном получении одного и того же сообщения.

Дополнительные сведения о том, как Центр Интернета вещей обрабатывает сообщения из облака на устройство, включая сведения об их жизненном цикле, см. в этой статье.

Примечание.

Если в качестве транспорта вместо MQTT или AMQP используется HTTPS, экземпляр DeviceClient редко проверяет наличие сообщений от Центра Интернета вещей (не чаще, чем каждые 25 минут). Дополнительные сведения о различиях между MQTT, AMQP и HTTPS см. в статьях Руководство по обмену данными между облаком и устройством и Выбор протокола связи.

Создание метода обратного вызова состояния сообщения

Приложение может использовать registerConnectionStatusChangeCallback для регистрации метода обратного вызова, выполняемого при изменении состояния подключения устройства. Таким образом приложение может обнаружить подключение к неупустимым сообщениям и попытаться повторно подключиться.

В этом примере IotHubConnectionStatusChangeCallbackLogger регистрируется в качестве метода обратного вызова изменения состояния подключения.

client.registerConnectionStatusChangeCallback(new IotHubConnectionStatusChangeCallbackLogger(), new Object());

Обратный ConnectionStatusChangeContext вызов запускается и передается объект.

Вызов connectionStatusChangeContext.getNewStatus() для получения текущего состояния подключения.

IotHubConnectionStatus status = connectionStatusChangeContext.getNewStatus();

Возвращаемое состояние подключения может быть одним из следующих значений:

  • IotHubConnectionStatus.DISCONNECTED
  • IotHubConnectionStatus.DISCONNECTED_RETRYING
  • IotHubConnectionStatus.CONNECTED

Вызов connectionStatusChangeContext.getNewStatusReason() , чтобы получить причину изменения состояния подключения.

IotHubConnectionStatusChangeReason statusChangeReason = connectionStatusChangeContext.getNewStatusReason();

Вызов connectionStatusChangeContext.getCause() , чтобы найти причину изменения состояния подключения. getCause() может вернуться null , если нет сведений.

Throwable throwable = connectionStatusChangeContext.getCause();
if (throwable != null)
    throwable.printStackTrace();

Полный пример изменения состояния подключения метода обратного вызова, причина изменения состояния подключения метода обратного вызова состояния, причина изменения состояния устройства в состоянии изменения состояния и контекста см. в примере примера, приведенном в примере примера.

Открытие подключения между устройством и Центр Интернета вещей

Откройте для создания подключения между устройством и Центр Интернета вещей. Теперь устройство может асинхронно отправлять и получать сообщения в Центр Интернета вещей. Если клиент уже открыт, метод ничего не делает.

client.open(true);

Пример сообщения получения пакета SDK

HandleMessages: пример приложения устройства, включенного в пакет SDK Для Интернета вещей Microsoft Azure для Java, который подключается к центру Интернета вещей и получает сообщения из облака на устройство.

Отправка сообщений из облака на устройства с помощью Центра Интернета вещей (Node)

В этом разделе описывается, как отправить сообщение об облаке на устройство с помощью класса ServiceClient из пакета SDK Интернета вещей Azure для Java. Серверное приложение решения подключается к Центр Интернета вещей и сообщения отправляются в Центр Интернета вещей закодированные с конечным устройством. Центр Интернета вещей хранит входящие сообщения в очередь сообщений и сообщения доставляются из очереди сообщений Центр Интернета вещей на целевое устройство.

Серверное приложение решения также может запрашивать и получать отзывы о доставке сообщения, отправленные в Центр Интернета вещей, предназначенные для доставки устройств через очередь сообщений.

Добавление инструкции зависимостей

Добавьте зависимость для использования пакета iothub-java-service-client в приложении для взаимодействия со службой Центра Интернета вещей:

<dependency>
  <groupId>com.microsoft.azure.sdk.iot</groupId>
  <artifactId>iot-service-client</artifactId>
  <version>1.7.23</version>
</dependency>

Добавление инструкций импорта

Добавьте эти инструкции импорта для использования пакета SDK Для Java Для Интернета вещей Azure и обработчика исключений.

import com.microsoft.azure.sdk.iot.service.*;
import java.io.IOException;
import java.net.URISyntaxException;

Определение протокола подключения

Используйте IotHubServiceClientProtocol, чтобы определить протокол уровня приложения, используемый клиентом службы для взаимодействия с Центр Интернета вещей.

IotHubServiceClientProtocolпринимает только перечислениеAMQPS.AMQPS_WS

private static final IotHubServiceClientProtocol protocol =    
    IotHubServiceClientProtocol.AMQPS;

Создание объекта ServiceClient

Создайте объект ServiceClient, предоставляя строка подключения и протокол Центра Iot.

private static final String connectionString = "{yourhubconnectionstring}";
private static final ServiceClient serviceClient (connectionString, protocol);

Открытие подключения между приложением и Центр Интернета вещей

откройте подключение отправителя AMQP. Этот метод создает соединение между приложением и Центр Интернета вещей.

serviceClient.open();

Открытие приемника отзывов для обратной связи по доставке сообщений

Вы можете использовать ОтзывReceiver для отправки сообщений в Центр Интернета вещей обратной связи. A FeedbackReceiver — специализированный приемник, Receive метод которого возвращает FeedbackBatch вместо него Message.

В этом примере FeedbackReceiver создается объект, и open() оператор вызывается для ожидания обратной связи.

FeedbackReceiver feedbackReceiver = serviceClient
  .getFeedbackReceiver();
if (feedbackReceiver != null) feedbackReceiver.open();

Добавление свойств сообщения

При необходимости можно использовать setProperties для добавления свойств сообщения. Эти свойства включаются в сообщение, отправленное на устройство, и его можно извлечь приложением устройства после получения.

Map<String, String> propertiesToSend = new HashMap<String, String>();
propertiesToSend.put(messagePropertyKey,messagePropertyKey);
messageToSend.setProperties(propertiesToSend);

Создание и отправка асинхронного сообщения

Объект Message сохраняет сообщение для отправки. В этом примере передается сообщение "Облако на устройство".

Используйте setDeliveryAcknowledgement для запроса, доставленного или не доставленного в Центр Интернета вещей подтверждение очереди сообщений. В этом примере запрашивается Fullподтверждение либо доставлено, либо не доставлено.

Используйте SendAsync для отправки асинхронного сообщения от клиента на устройство. Кроме того, можно использовать Send метод (не асинхронный), но эта функция синхронизируется внутри системы, чтобы одновременно разрешалось только одна операция отправки. Сообщение доставляется из приложения в Центр Интернета вещей. Центр Интернета вещей помещает сообщение в очередь сообщений, готовую к доставке на целевое устройство.

Message messageToSend = new Message("Cloud to device message.");
messageToSend.setDeliveryAcknowledgementFinal(DeliveryAcknowledgement.Full);
serviceClient.sendAsync(deviceId, messageToSend);

Получение отзывов о доставке сообщений

После отправки сообщения из приложения приложение может вызываться со значением времени ожидания или без нее. Если значение времени ожидания не задано, используется время ожидания по умолчанию. Это передает объект FeedbackBatch, содержащий свойства обратной связи доставки сообщений, которые можно проверить.

В этом примере создается FeedbackBatch приемник и вызовы getEnqueuedTimeUtc, печать сообщения, заклинированного времени.

FeedbackBatch feedbackBatch = feedbackReceiver.receive(10000);
if (feedbackBatch != null) {
  System.out.println("Message feedback received, feedback time: "
    + feedbackBatch.getEnqueuedTimeUtc().toString());
}

Примеры отправки сообщений пакета SDK

  • Пример клиента службы— пример отправки сообщения, #1.

  • Пример клиента службы— пример отправки сообщения, #2.

Установка библиотеки пакета SDK Для Интернета вещей Azure

Установите библиотеку пакета SDK для azure-iot-device на компьютере разработки перед вызовом любого связанного кода:

pip install azure-iot-device

Существует два класса пакета SDK для Python, которые используются для отправки сообщений на устройства Интернета вещей и с устройств Интернета вещей. Методы обработки сообщений из этих классов описаны в разделах на этой странице.

  • Класс IoTHubDeviceClient включает методы для создания синхронного подключения с устройства на Центр Интернета вещей Azure и получения сообщений из Центр Интернета вещей.

  • Класс IoTHubRegistryManager включает API для операций диспетчера реестра Центр Интернета вещей. В этой статье методы из этого класса показывают, как подключиться к Центр Интернета вещей и отправить сообщение на устройство.

Получение сообщений из облака на устройство

В этом разделе описывается, как получать сообщения из облака на устройство с помощью класса IoTHubDeviceClient из пакета SDK Для Интернета вещей Azure для Python.

Чтобы приложение устройства на основе Python получило сообщения из облака на устройство, оно должно подключиться к Центр Интернета вещей, а затем настроить обработчик обратного вызова для обработки входящих сообщений из Центр Интернета вещей.

Импорт объекта IoTHubDeviceClient

Добавьте строку кода для импорта IoTHubDeviceClient функций из пакета SDK для azure.iot.device.

from azure.iot.device import IoTHubDeviceClient

Подключение клиента устройства

Создайте экземпляр IoTHubDeviceClient, передав Центр Интернета вещей строка подключения в create_from_connection_string. Это создает подключение с устройства к Центр Интернета вещей.

Кроме того, вы можете подключиться IoTHubDeviceClientк устройству с помощью одного из следующих методов:

deviceConnectionString = "{your IoT hub connection string}";
client = IoTHubDeviceClient.create_from_connection_string ({deviceConnectionString})

Обработка повторного подключения

IoTHubDeviceClient по умолчанию попытается восстановить удаленное подключение. Поведение повторного подключения регулируется IoTHubDeviceClient connection_retry и connection_retry_interval параметрами.

Создание обработчика сообщений

Создайте функцию обработчика сообщений для обработки входящих сообщений на устройство.

В этом примере message_handler вызывается при получении сообщения. Свойства сообщения (.items) печатаются в консоли с помощью цикла.

def message_handler(message):
    global RECEIVED_MESSAGES
    RECEIVED_MESSAGES += 1
    print("")
    print("Message received:")

    # print data from both system and application (custom) properties
    for property in vars(message).items():
        print ("    {}".format(property))

    print("Total calls received: {}".format(RECEIVED_MESSAGES))

Назначение обработчика сообщений

Используйте метод on_message_received для назначения метода обработчика сообщений объектуIoTHubDeviceClient.

В этом примере метод обработчика сообщений с именем message_handler присоединен к объекту IoTHubDeviceClient client . Объект client ожидает получения сообщения из Центр Интернета вещей облака на устройство. Этот код ожидает до 300 секунд (5 минут) сообщения или завершает работу, если клавиша клавиатуры нажимается.

try:
    # Attach the handler to the client
    client.on_message_received = message_handler

    while True:
        time.sleep(300)
except KeyboardInterrupt:
    print("IoT Hub C2D Messaging device sample stopped")
finally:
    # Graceful exit
    print("Shutting down IoT Hub Client")
    client.shutdown()

Пример сообщения получения пакета SDK

Получение сообщения— получение сообщений из облака на устройство (C2D), отправляемых с Центр Интернета вещей Azure на устройство.

Отправка сообщений из облака на устройства с помощью Центра Интернета вещей (Node)

В этом разделе описывается, как отправить сообщение об облаке на устройство с помощью класса IoTHubRegistryManager из пакета SDK Для Интернета вещей Azure для Python. Серверное приложение решения подключается к Центр Интернета вещей и сообщения отправляются в Центр Интернета вещей закодированные с конечным устройством. Центр Интернета вещей хранит входящие сообщения в очередь сообщений и сообщения доставляются из очереди сообщений Центр Интернета вещей на целевое устройство.

Импорт объекта IoTHubRegistryManager

Добавьте следующий оператор import . IoTHubRegistryManager включает API для операций диспетчера реестра Центр Интернета вещей.

from azure.iot.hub import IoTHubRegistryManager

Подключение диспетчера реестра Центр Интернета вещей

Создайте экземпляр объекта IoTHubRegistryManager, который подключается к Центру Интернета вещей, передав Центр Интернета вещей строка подключения в from_connection_string.

IoTHubConnectionString = "{Primary connection string to an IoT hub}"
registry_manager = IoTHubRegistryManager.from_connection_string(IoTHubConnectionString)

Создание и отправка сообщения

Используйте send_c2d_message для отправки сообщения через облако (Центр Интернета вещей) на устройство.

send_c2d_message использует следующие параметры:

  • deviceID — строковый идентификатор целевого устройства.
  • message — сообщение об облачном устройстве. Сообщение имеет тип str (строку).
  • properties— необязательная коллекция свойств типаdict. Свойства могут содержать свойства приложения и системные свойства. Значение по умолчанию — {}.

В этом примере отправляется тестовое сообщение на целевое устройство.

# define the device ID
deviceID = "Device-1"

# define the message
message = "{\"c2d test message\"}"

# include optional properties
props={}
props.update(messageId = "message1")
props.update(prop1 = "test property-1")
props.update(prop1 = "test property-2")
prop_text = "Test message"
props.update(testProperty = prop_text)

# send the message through the cloud (IoT Hub) to the device
registry_manager.send_c2d_message(deviceID, message, properties=props)

Пример сообщения отправки пакета SDK

send_message.py. Демонстрирует отправку сообщения об облаке на устройство.

Установка пакетов обмена сообщениями Node.js

Выполните следующие команды, чтобы установить пакеты azure-iot-device и azure-iothub на компьютере разработки:

npm install azure-iot-device --save
npm install azure-iothub --save

Пакет azure-iot-device содержит объекты, которые интерфейсирует с устройствами Интернета вещей. В этой статье описывается Client код класса, получающий сообщения от Центр Интернета вещей.

Пакет Azure-iothub содержит объекты, которые интерфейсирует с Центр Интернета вещей. В этой статье описывается Client код класса, который отправляет сообщение из приложения на устройство через Центр Интернета вещей.

Получение сообщений в приложении устройства

В этом разделе описывается, как получать сообщения из облака на устройство с помощью пакета azure-iot-device в пакете AZURE IoT SDK для Node.js.

Чтобы приложение устройства на основе Node.js получать сообщения из облака на устройство, оно должно подключиться к Центр Интернета вещей, а затем настроить прослушиватель обратного вызова и обработчик сообщений для обработки входящих сообщений из Центр Интернета вещей. Приложение устройства также должно иметь возможность обнаруживать и обрабатывать отключения, если подключение сообщения к устройству Центр Интернета вещей нарушено.

Создание клиентского модуля

В пакете azure-iot-device создайте Client класс Client . Класс Client содержит методы, которые устройство может использовать для получения и отправки в Центр Интернета вещей.

const Client = require('azure-iot-device').Client;

Выбор транспортного протокола

Объект Client поддерживает следующие протоколы:

  • Amqp
  • Http— При использовании HttpClient экземпляр проверяет наличие сообщений из Центр Интернета вещей редко (как минимум каждые 25 минут).
  • Mqtt
  • MqttWs
  • AmqpWs

Дополнительные сведения о различиях между MQTT, AMQP и HTTPS см. в статьях Руководство по обмену данными между облаком и устройством и Выбор протокола связи.

В этом примере протокол AMQP назначается переменной Protocol . Эта переменная протокола передается Client.fromConnectionString методу в разделе "Добавление строка подключения" этой статьи.

const Protocol = require('azure-iot-device-mqtt').Amqp;

Завершение сообщений, отклонение и отказ возможностей

Методы завершения сообщений, отклонения и отказа можно использовать в зависимости от выбранного протокола.

AMQP и HTTP

Транспорты AMQP и HTTP могут завершить, отклонить или отказаться от сообщения:

  • Завершено . Чтобы завершить сообщение, служба, отправляющая сообщение об облаке на устройство, уведомляется о получении сообщения. Центр Интернета вещей удаляет сообщение из очереди сообщений. Метод принимает форму client.complete(message, callback function).
  • Отклонить сообщение. Чтобы отклонить сообщение, служба, отправляющая сообщение об облаке на устройство, уведомляется о том, что сообщение не обрабатывается устройством. Центр Интернета вещей окончательно удаляет сообщение из очереди устройства. Метод принимает форму client.reject(message, callback function).
  • Отмена — чтобы отказаться от сообщения, Центр Интернета вещей немедленно пытается повторно отправить его. Центр Интернета вещей сохраняет сообщение в очереди устройств для будущего потребления. Метод принимает форму client.abandon(message, callback function).
MQTT

MQTT не поддерживает завершение, отклонение или отказ функций. Вместо этого MQTT принимает сообщение по умолчанию, и сообщение удаляется из очереди сообщений Центр Интернета вещей.

Попытки redelivery

Если по какой-либо причине устройство не сможет завершить обработку сообщения, отказаться от него или отклонить его, Центр Интернета вещей после фиксированного периода ожидания снова поместит сообщение в очередь для доставки. Поэтому логика обработки сообщений в приложении устройства должна быть идемпотентной. Это обеспечит одинаковый результат при многократном получении одного и того же сообщения.

Добавление строки Центр Интернета вещей и протокола транспорта

Вызов изConnectionString для установления подключения к центру Интернета вещей с помощью следующих параметров:

  • connStr — строка подключения который инкапсулирует разрешения "подключение устройства" для Центра Интернета вещей. Строка подключения содержит имя узла, идентификатор устройства и общий ключ доступа в этом формате: "HostName=<iothub_host_name>; DeviceId=<device_id>; SharedAccessKey=<device_key>"
  • transportCtor — транспортный протокол.
const Protocol = require('azure-iot-device-mqtt').Amqp;
let client = Client.fromConnectionString(deviceConnectionString, Protocol);

Создание обработчика входящих сообщений

Обработчик сообщений вызывается для каждого входящего сообщения.

После успешного получения сообщения при использовании транспорта AMQP или HTTP вызовите client.complete метод, чтобы сообщить Центр Интернета вещей, что сообщение можно удалить из очереди сообщений.

Например, этот обработчик сообщений выводит идентификатор сообщения и текст сообщения в консоль, а затем вызывает client.complete уведомление Центр Интернета вещей о том, что он обработал сообщение и что его можно безопасно удалить из очереди устройства. Вызов complete не требуется, если вы используете транспорт MQTT и может быть опущен. Для транспорта AMQP или HTTPS требуется вызовcomplete .

function messageHandler(msg) {
  console.log('Id: ' + msg.messageId + ' Body: ' + msg.data);
  client.complete(msg, printResultFor('completed'));
}

Создание обработчика отключения подключения

Обработчик отключения вызывается при отключении подключения. Обработчик отключения полезен для реализации кода повторного подключения.

В этом примере отображается сообщение об ошибке отключения в консоли.

function disconnectHandler() {
  clearInterval(sendInterval);
  sendInterval = null;
  client.open().catch((err) => {
    console.error(err.message);
  });
}

Добавление прослушивателей событий

Эти прослушиватели событий можно указать с помощью метода .on .

  • Обработчик соединений
  • Обработчик ошибок
  • Обработчик отключения
  • Обработчик сообщений

В этом примере содержатся обработчики сообщений и отключений, определенные ранее.

client.on('connect', connectHandler);
client.on('error', errorHandler);
client.on('disconnect', disconnectHandler);
client.on('message', messageHandler);

Открытие подключения к Центр Интернета вещей

Используйте открытый метод, чтобы открыть подключение между устройством Интернета вещей и Центр Интернета вещей. Используется .catch(err) для перехвата ошибки и кода обработчика вызовов.

Например:

client.open()
.catch((err) => {
  console.error('Could not connect: ' + err.message);
});

Пример сообщения получения пакета SDK

simple_sample_device — приложение устройства, которое подключается к центру Интернета вещей и получает сообщения из облака на устройство.

Отправка сообщений из облака на устройства с помощью Центра Интернета вещей (Node)

В этом разделе описывается, как отправить сообщение об облаке на устройство с помощью пакета Azure-iothub из пакета Azure IoT SDK для Node.js. Как упоминалось ранее, серверное приложение решения подключается к Центр Интернета вещей и сообщения отправляются в Центр Интернета вещей закодированные с помощью целевого устройства. Центр Интернета вещей хранит входящие сообщения в очередь сообщений и сообщения доставляются из очереди сообщений Центр Интернета вещей на целевое устройство.

Серверное приложение решения также может запрашивать и получать отзывы о доставке сообщения, отправленные в Центр Интернета вещей, предназначенные для доставки устройств через очередь сообщений.

Загрузка модулей клиента и сообщений

Объявите Client объект с помощью Client класса из azure-iothub пакета.

Объявите Message объект с помощью Message класса из azure-iot-common пакета.

'use strict';
var Client = require('azure-iothub').Client;
var Message = require('azure-iot-common').Message;

Создание объекта Client

Создайте клиент с помощью fromConnectionString с помощью следующих параметров:

  • Строка подключения к Центру Интернета вещей
  • Тип транспорта

В этом примере serviceClient объект создается с типом Amqp транспорта.

var connectionString = '{IoT Hub connection string}';
var serviceClient = Client.fromConnectionString(connectionString,`Amqp`);

Открытие подключения клиента

Вызовите открытый Client метод, чтобы открыть соединение между приложением и Центр Интернета вещей.

open можно вызывать с или без указания функции обратного вызова, вызываемой при open завершении операции.

В этом примере open метод включает необязательную функцию err обратного вызова подключения. При возникновении открытой ошибки возвращается объект ошибки. Если открытое подключение успешно выполнено, null возвращается значение обратного вызова.

serviceClient.open(function (err)
if (err)
  console.error('Could not connect: ' + err.message);

Создание сообщения

Объект сообщения содержит асинхронное сообщение об облачном устройстве. Функции сообщения работают так же, как amQP, MQTT и HTTP.

Объект сообщения поддерживает несколько свойств, включая эти свойства. См. свойства сообщения для полного списка.

  • ack — Отзывы о доставке. Описано в следующем разделе.
  • properties — карта, содержащая строковые ключи и значения для хранения настраиваемых свойств сообщения.
  • messageId — используется для корреляции двустороннего взаимодействия.

Добавьте текст сообщения при создании экземпляра объекта сообщения. В этом примере 'Cloud to device message.' добавляется сообщение.

var message = new Message('Cloud to device message.');
message.ack = 'full';
message.messageId = "My Message ID";

Подтверждение доставки

Программа отправки может запрашивать подтверждения доставки (или истечения срока действия) из Центр Интернета вещей для каждого сообщения из облака на устройство. Этот параметр позволяет программе отправки использовать логику информирования, повтора или компенсации. Полное описание операций обратной связи и свойств сообщений описано в отзыве сообщения.

Каждое сообщение, которое должно получать отзывы о сообщении, должно содержать значение для свойства подтверждения доставки. Свойство ack может быть одним из следующих значений:

  • none (по умолчанию): сообщение обратной связи не создается.

  • sent: получает сообщение обратной связи, если сообщение было завершено.

  • : получает сообщение обратной связи, если сообщение истекло (или максимальное число доставки было достигнуто) без завершения устройством.

  • full: отзывы о отправленных и не отправленных результатах.

В этом примере ack для свойства задано fullзначение , запрашивающее как отправленные, так и не отправленные отзывы о доставке сообщений для одного сообщения.

message.ack = 'full';

Функция обратного вызова получателя обратного Client вызова обратного сообщения связана с помощью getFeedbackReceiver.

Получатель отзывов сообщений получает два аргумента:

  • Объект ошибки (может иметь значение NULL)
  • Объект AmqpReceiver — выдает события при получении клиентом новых сообщений обратной связи.

В этом примере функция получает и выводит сообщение обратной связи о доставке в консоль.

function receiveFeedback(err, receiver){
  receiver.on('message', function (msg) {
    console.log('Feedback message:')
    console.log(msg.getData().toString('utf-8'));
  });
}

Этот код связывает receiveFeedback функцию обратного вызова обратного вызова обратной связи с объектом службы Client с помощью getFeedbackReceiver.

serviceClient.getFeedbackReceiver(receiveFeedback);

Определение обработчика результатов завершения сообщения

Функция обратного вызова отправки сообщения вызывается после отправки каждого сообщения.

В этом примере функция выводит результаты операции сообщения send в консоль. В этом примере функция предоставляется в качестве параметра send функции, printResultFor описанной в следующем разделе.

function printResultFor(op) {
  return function printResult(err, res) {
    if (err) console.log(op + ' error: ' + err.toString());
    if (res) console.log(op + ' status: ' + res.constructor.name);
  };
}

Отправка сообщений

Используйте функцию отправки для отправки асинхронного сообщения из облака на устройство через Центр Интернета вещей.

send поддерживает следующие параметры:

  • deviceID — идентификатор устройства целевого устройства.
  • сообщение — текст сообщения для отправки на устройство.
  • Готово . Необязательная функция для вызова при завершении операции. Готово вызывается с двумя аргументами:
    • Объект ошибки (может иметь значение NULL).
    • Объект ответа для конкретного транспорта, полезный для ведения журнала или отладки.

Этот код вызывает send отправку сообщения из облака на устройство через Центр Интернета вещей. Функция обратного вызова printResultFor , определенная в предыдущем разделе, получает сведения о подтверждении доставки.

var targetDevice = '{device ID}';
serviceClient.send(targetDevice, message, printResultFor('send'));

В этом примере показано, как отправить сообщение на устройство и обработать сообщение обратной связи при подтверждении сообщения об облаке на устройство:

serviceClient.open(function (err) {
  if (err) {
    console.error('Could not connect: ' + err.message);
  } else {
    console.log('Service client connected');
    serviceClient.getFeedbackReceiver(receiveFeedback);
    var message = new Message('Cloud to device message.');
    message.ack = 'full';
    message.messageId = "My Message ID";
    console.log('Sending message: ' + message.getData());
    serviceClient.send(targetDevice, message, printResultFor('send'));
  }
});

Пример сообщения отправки пакета SDK

send_c2d_message.js — отправка сообщений C2D на устройство через Центр Интернета вещей.

Политика повторного подключения подключения подключения

В этой статье не демонстрируется политика повторных попыток для устройства Центр Интернета вещей подключения или внешнего приложения для Центр Интернета вещей подключения. В рабочем коде следует реализовать политики повторных попыток подключения, как описано в разделе "Управление повторное подключение устройства" для создания устойчивых приложений.

Время хранения сообщений, повторные попытки и максимальное число доставки

Как описано в разделе "Отправка сообщений из облака на устройство" из Центр Интернета вещей, можно просматривать и настраивать значения по умолчанию для следующих значений сообщений с помощью параметров конфигурации портала Центр Интернета вещей или Azure CLI. Эти параметры конфигурации могут повлиять на доставку сообщений и отзыв.

  • TTL по умолчанию (время жизни) — время, когда сообщение доступно для устройства, которое будет использоваться до истечения срока действия Центр Интернета вещей.
  • Время хранения отзывов— время Центр Интернета вещей сохраняет отзыв о истечении срока действия или доставке сообщений из облака на устройство.
  • Количество попыток доставки сообщения из облака на устройство в Центр Интернета вещей.