Java 在Azure IoT中配置设备时如何发送自定义负载?

Java 在Azure IoT中配置设备时如何发送自定义负载?,java,azure,iot,azure-iot-hub,azure-iot-sdk,Java,Azure,Iot,Azure Iot Hub,Azure Iot Sdk,我正在尝试使用Azure IoT设备配置服务将我的设备配置到Azure IoT中,我在该服务中使用的是“管理注册组”下的自定义分配策略 当设备注册到DPS(设备供应服务)时,它会触发Azure功能,在该功能中,我将决定将设备分配给哪个IoT集线器 在我的功能中,我必须根据在向DPS注册时需要从设备发送的一些自定义负载来做出此决定 我将如何在注册自身时将自定义负载从设备发送到DPS,以便我可以在Azure函数中获取该负载并做出决定 我使用Java作为同样的编程语言。如果您使用基于X.509的身份验

我正在尝试使用Azure IoT设备配置服务将我的设备配置到Azure IoT中,我在该服务中使用的是“管理注册组”下的自定义分配策略

当设备注册到DPS(设备供应服务)时,它会触发Azure功能,在该功能中,我将决定将设备分配给哪个IoT集线器

在我的功能中,我必须根据在向DPS注册时需要从设备发送的一些自定义负载来做出此决定

我将如何在注册自身时将自定义负载从设备发送到DPS,以便我可以在Azure函数中获取该负载并做出决定


我使用Java作为同样的编程语言。

如果您使用基于X.509的身份验证,Azure函数将获取实际证书作为请求的一部分(在
clientCertificate
字段中)

因此,您可能希望在您的证书中使用您可以在函数中读取的自定义字段,然后根据其内容分配您选择的物联网中心


另一种选择可能更优雅,因为证书中的自定义字段可能会公开最好保持私有的信息,即在单独的存储中维护registrationId、customerId、customerId等之间的映射,您可以在Azure函数中查询它。

我在Node.js中通过单独发送自定义负载而不是在证书的自定义字段中实现了上述功能。是用于在node.js中的Azure函数中处理自定义负载的链接。根据Azure文档,此功能在C、C#、JAVA和Node.js客户端SDK中可用

关于在设备注册期间发送有效负载,是Java中应该使用的方法


使用上述方法,您可以避免暴露证书中自定义字段中的数据。

实际上,Azure SDK支持在通过设备配置客户端注册设备时发送自定义负载。请参见.NET SDK中的ProvisioningRegistrationAdditionalData类

我认为JavaSKD中的等效类是AdditionalData类

此外,您还可以使用DPS REST API在注册设备时提供自定义负载。在本文()的答案中,您可以找到一个带有curl的请求示例,用于为设备提供自定义负载

curl -L -i -X PUT --cert ./chain.pem --key ./iot-device-1.key.pem -H 'Content-Type: application/json' -H 'Content-Encoding:  utf-8' -d '{"registrationId": "iot-device-1", "payload": {"CustomProperty": "CustomValue"}}' https://global.azure-devices-provisioning.net/XXXXXXXXXXX/registrations/iot-device-1/register?api-version=2019-03-31

还要检查这个答案所基于的帖子()和REST API文档()。

您是否尝试使用自定义分配策略?请参阅参考-在该文档中,它解释了如何根据设备的注册ID后缀将设备提供给特定的物联网中心。感谢@sergaz的回复,我尝试了自定义分配策略,但我的问题是,我必须根据一些其他密钥将设备提供给特定的物联网中心,这些密钥应该是我的密钥,如customerId、customerName、,等等。它不是注册ID。那么在注册我的设备时,有没有办法将我的自定义负载发送到DPS?感谢回复,我必须尝试证书选项中的自定义字段,因此将很快更新我的疑问或回答。嘿,我尝试了此解决方案,我在证书中添加了自定义字段,并在azure函数中获得了这些字段,通过这些字段,我能够实现我的要求。再次感谢您的快速解决方案。:)