Проблема с триггером концентратора событий Azure-Function с параметрами привязки к сложным объектам - PullRequest
0 голосов
/ 11 ноября 2019

Я пытаюсь отправить данные в 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

1 Ответ

0 голосов
/ 11 ноября 2019

Как уже упоминалось here, вам необходимо создать DefaultType для атрибута триггера EventHubs и убедиться, что он зарегистрирован в поставщике метаданных

пример кода здесь .

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