Azure Stream Analytics Job反序列化失败:'username'属性已存在
结合我处理Azure Stream Analytics(ASA)与IoT Hub集成问题的经验,这个"Property with name 'username' already exists"的反序列化错误,虽然你说输入流里没有username属性,但大概率是以下几个场景导致的:
设备端发送的消息存在重复JSON键
很多时候,设备端的代码在生成JSON消息时,可能不小心重复写入了username字段(比如字典重复赋值、JSON拼接错误)。比如类似{"username":"device1", "username":"device1_dup"}的结构,虽然肉眼难察觉,但ASA使用的JSON反序列化器(默认基于Newtonsoft.Json)会严格检查重复键,直接抛出这个错误。你可以通过IoT Hub的内置消息捕获功能,导出几条失败的原始消息,查看是否存在这种重复键的情况。IoT Hub系统/自定义属性与消息体的隐性冲突
如果你的ASA输入配置中开启了包含系统属性(Include system properties)或者添加了自定义路由属性,有可能某些属性被映射为username(比如设备连接时的身份标识被自动注入),而ASA在反序列化时将这些属性与消息体合并处理,导致键名冲突。你可以检查ASA输入的配置页面,确认是否启用了系统属性的导入,同时查看IoT Hub的路由规则是否添加了名为username的自定义属性。反序列化器的配置或自定义逻辑问题
如果你使用了自定义反序列化器(比如Protobuf、Avro或者自定义JSON解析逻辑),可能是反序列化代码中不小心添加了username属性,或者解析规则导致重复键的生成。比如自定义解析器在处理消息时,强制添加了username字段,而原始消息中(哪怕你没注意到)已经存在这个键,就会触发冲突错误。IoT Hub消息路由的中转修改
如果你的IoT Hub配置了路由到其他服务(比如Event Grid、Storage)再转发到ASA,中间的服务可能给消息添加了username属性。比如某些中间处理环节为了标识消息来源,自动注入了这个字段,导致ASA接收到的消息包含重复的键。
内容的提问来源于stack exchange,提问作者Howard Hoffman

