Обрабатывать несколько сообщений из IoT hub за один сеанс функций c # Azure

#c# #azure #azure-functions #iot #azure-iot-hub

#c# #azure #azure-функции #iot #azure-iot-hub

Вопрос:

Мне нужно обрабатывать сообщения с устройств IoT, и до сих пор у меня все было в порядке с моим рабочим процессом (устройство IoT отправляет сообщение в IoT Hub, а функция Azure, запускаемая IoT Hub, обрабатывает сообщение и сохраняет информацию в Azure SQL). Но теперь у меня есть устройство, которое отправляет всю информацию в двух отдельных сообщениях подряд (из-за длины информации). Есть ли какое-либо решение о том, как обрабатывать эти два отдельных сообщения одновременно? (Каждый тип сообщения имеет уникальный идентификатор, поэтому я бы знал, какое сообщение является первой частью информации, а какое — второй)

Комментарии:

1. взгляните на задание Azure Stream Analytics для вашего решения, learn.microsoft.com/en-us/azure/stream-analytics

2. Раньше я использовал Stream Analytics, но это намного дороже, чем функция Azure, поэтому я переключился на AF и не хочу возвращаться к SA.

Ответ №1:

Можно ли загрузить его в виде файла в хранилище больших двоичных объектов, назначенное IoT Hub, и с помощью метода DeviceClient UploadBlobAsync? Таким образом, вы можете прикрепить функцию Azure, когда новый файл появится в контейнере для хранения больших двоичных объектов. Это может быть одним из способов.

Если вам не нравится решение для загрузки файлов, вы должны учитывать, что функции Azure не имеют состояния, и если вам нужно объединить два сообщения, чтобы получить одну информацию на стороне облака, вам нужно будет где-то сохранить состояние и проверить оттуда.

Кроме того, надежность здесь также следует учитывать, прежде чем решать, является ли AF подходящим сервисом для потоковой обработки в данном конкретном случае. Например: может ли быть так, что приходит первое сообщение, и соединение прерывается до того, как второе сообщение поступает в IoT Hub. И можете ли вы быть уверены, что сообщения всегда будут приходить по порядку?

Комментарии:

1. Спасибо, что показали варианты. Как я писал выше, я использовал Stream Analytics для обработки сообщений из IoT Hub, но это намного дороже, чем функция Azure, поэтому я хотел бы остаться в AF. Я думал, что рабочий процесс будет … сохранять первую часть в Azure SQL в какую-то временную таблицу, а при обработке второй части извлекать первую из SQL, а затем объединять обе части в AF, когда информация будет завершена, и, наконец, сохранять ее в финальной таблице. Соответствующим ключом будет порядковый номер из IoT Hub.

2. Возможно, вы можете воспользоваться преимуществами CosmosDB аналогичным образом, сохранять сообщения и запускать AF при записи CosmosDB. В AF вы можете выполнить проверку наличия обеих частей, а затем продолжить. На мой взгляд, это больше зависит от событий.

3. Кроме того, CosmosDB может быть немного быстрее, если вы правильно с ним справляетесь.

4. Значит, в этом случае должно быть два AFS? Потому что мой исходный AF запускается IoT hub (обрабатывает все сообщения, поступающие на IoT hub), и если я прав, больше триггеров быть не может.

5. Правильно, я предложил запустить другую функцию для CosmosDB. Это также своего рода разделение задач и делегирование разных обязанностей двум функциям вместо одной. Конечно, просто для того, чтобы наметить, масштабирование и надежность также были бы темой, которую следует учитывать при работе над решениями IoT, особенно с AFS в данном случае, но это не то, к чему относится ваш вопрос, но, пожалуйста, имейте это в виду.