azure - 将参数绑定到复杂对象的 Azure-Function eventthub 触发器问题
问题描述
我正在尝试将数据发送到 IoT 中心,IoT 中心将数据发送到流分析,然后再发送到事件中心。将消息输入事件中心后立即触发 Azure 功能。我面临的问题是,当我从 VS Code(向 IoT Hub 发送 D2C 消息)选项发送 10 条消息时。该函数抛出此错误:
将参数绑定到复杂对象(例如“对象”)使用 Json.NET 序列化。1. 将参数类型绑定为 'string' 而不是 'Object' 以获取原始值并避免 JSON 反序列化,或者 2. 将队列负载更改为有效的 json。JSON 解析器失败:解析值时遇到意外字符:路径“”,第 0 行,位置 0。
根据我的调查,此消息指向无效的 json,但事实并非如此。我的 json 是正确且有效的,因为我的函数可以正确解析它。当我开始向上扩展(以更短的间隔发送更多消息)到 IoT 中心时,会出现此问题。我不确定是什么原因造成的。如果消息不正确,那么函数应该为每条消息抛出错误,而不是随机抛出错误。此外,这个异常没有被捕获,因为这发生在我的函数代码之外的天蓝色方面。我function.json
的如下:
{
"scriptFile": "main.py",
"bindings": [
{
"type": "eventHubTrigger",
"name": "event",
"direction": "in",
"eventHubName": "myhubName",
"connection": "myConnectionString",
"cardinality": "many",
"consumerGroup": "$Default"
}
]
}
我不确定我在这个文件中缺少什么?我不想缩小我的 cardinality(one) 选项,因为当前选项是推荐的选项。类似的问题可以在这里看到。在这种情况下,它们可能没有有效的 json,而是一个字符串。虽然在我的情况下它总是 json 所以我不能使用dataType: string
属性。
主文件
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
解决方案
推荐阅读
- snowflake-cloud-data-platform - 如何从雪花生成固定宽度的文件并卸载到内部阶段
- java - 如何使用 BigDecimal 正确计算有理数
- html - 辅助功能:如何配置“列标题”公告?
- android - SearchView 使用 SearchView 过滤 RecyclerView 中的项目
- kotlin - Kotlin 1.5.0 和 1.6.0 中具有可为空参数的数据类引发 BackendException
- python-3.x - Python Pandas:匹配数据框中列的值并将另一列值复制到另一个数据框中
- gitlab - GitLab-CI:限制同一分支的并行管道
- php - 在循环中生成时将表单验证错误消息链接到特定表单实例 - PHP
- java - 如何在java中将方法标记为不鼓励?
- pull-request - AWS CodeCommit 拉取请求中的拆分视图显示意外结果