Прямое сообщение Azure Cloud to Device с использованием роли Cloud Service-Worker

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

Мы используем роль Cloud Service Worker для обработки команд и отправки на соответствующие устройства с помощью метода Cloud to Device Direct.

Конфигурация рабочей роли — ядро ​​A2V2-2 с 4 ГБ ОЗУ. Проблем с емкостью рабочей роли нет. ЦП и память полностью под контролем.

Для меньшего количества сообщений / команд, обрабатывающих его, он работает нормально (например, 500 сообщений). Но когда количество сообщений увеличивается, мы сталкиваемся с проблемой производительности (например, 1000 сообщений). Мы нацеливаемся на задержку ‹ 5 секунд. Когда мы пытаемся войти в рабочую роль VM и обнаружил, что число TCP-соединений продолжает увеличиваться, что вызывает замедление при отправке сообщений/команд на устройства.

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

 var methodInvocation = new CloudToDeviceMethod(methodInfo.MethodName) { ResponseTimeout = TimeSpan.FromSeconds(methodInfo.ResponseTimeout) };
            //set the payload
            methodInvocation.SetPayloadJson(methodInfo.Payload);

            //invokes direct method
             var response = _serviceClient.InvokeDeviceMethodAsync(methodInfo.DeviceId, methodInvocation);

            if (_serviceClient != null)
            {
                //closes the service client connection
                _serviceClient.CloseAsync();
                _serviceClient.Dispose();
            }

person RANJITH M    schedule 15.08.2018    source источник
comment
1.Можете ли вы проверить Cloud- руководство по связи с устройством, поэтому убедитесь, что в вашем случае требуется прямой метод связи, требующий немедленного подтверждения результата. Прямые методы часто используются для интерактивного управления устройствами, такими как включение вентилятора. 2. Сколько раз происходит 1000 сообщений, одна секунда?   -  person Rita Han    schedule 16.08.2018
comment
Спасибо Рита Хан.   -  person RANJITH M    schedule 16.08.2018
comment
Мы не можем использовать подход Cloud To Device Message из-за порогового ограничения. Таким образом, у нас есть только вариант использования прямого метода. Мы делаем от 100 до 150 сообщений в секунду.   -  person RANJITH M    schedule 16.08.2018


Ответы (1)


Наконец мы нашли решение. Объект «Клиент службы Azure» не был должным образом закрыт и удален. Мы закрыли и удалили объект «Клиент службы» явно после успешного прямого вызова метода.

  //closes the service client connection
  await _serviceClient.InvokeDeviceMethodAsync(methodInfo.DeviceId, methodInvocation);
 _serviceClient.CloseAsync().Wait();
 _serviceClient.Dispose();
person RANJITH M    schedule 16.08.2018
comment
@Спасибо, что поделился. Вы можете принять этот ответ, и мы сможем закрыть эту проблему. - person Rita Han; 17.08.2018