Я пытаюсь отправить данные в IoT Hub, который отправляет данные в потоковую аналитику, а затем в Event Hub. Функция Azure запускается, как только сообщение вводится в концентратор событий. Проблема, с которой я сталкиваюсь, заключается в том, что когда я отправляю 10 сообщений из опции VS Code (отправка сообщения D2C в IoT Hub). Функция выдает эту ошибку:
Привязка параметров к сложным объектам (таким как «Объект») использует сериализацию Json.NET. 1. Свяжите тип параметра как «string» вместо «Object», чтобы получить необработанные значения и избежать десериализации JSON, или 2. Измените полезную нагрузку очереди на допустимый json. Сбой синтаксического анализатора JSON: при анализе значения обнаружен неожиданный символ: путь '', строка 0, позиция 0.
Согласно моему исследованию, это сообщение указывает на недопустимый json, однако это не так,Мой JSON правильный и правильный, потому что моя функция анализирует его правильно. Эта проблема возникает, когда я начинаю масштабирование вверх (отправляю больше сообщений за меньшие промежутки времени) в IoT Hub. Я не уверен, что вызывает это. Если сообщение неверно, то функция должна выдавать ошибку для каждого сообщения, а не генерировать ошибку случайным образом. Кроме того, это исключение не перехватывается, потому что это происходит на лазурной стороне, а не в коде моей функции. Мой function.json
выглядит следующим образом:
{
"scriptFile": "main.py",
"bindings": [
{
"type": "eventHubTrigger",
"name": "event",
"direction": "in",
"eventHubName": "myhubName",
"connection": "myConnectionString",
"cardinality": "many",
"consumerGroup": "$Default"
}
]
}
Я не уверен, что мне не хватает в этом файле? Я не хочу уменьшать свой вариант кардинальности (один), поскольку текущий вариант является рекомендуемым. похожую проблему можно увидеть здесь . В этом случае они могут иметь не правильный JSON, а строку. Хотя в моем случае это всегда json, поэтому я не могу использовать свойство dataType: string
.
main.py
import logging
import sys
from sys import path
import os
import traceback
import azure.functions as func
from azure.storage.blob import BlockBlobService
import json
def main(event: func.EventHubEvent):
try:
# prints the message
print("*******************************************")
print(event.iothub_metadata)
print(event.get_body())
except:
# Logs the stack trace to the root level when errors occurs
logging.error("Unexpected Error: " + traceback.format_exc())
pass