我已经通过 Azure IoT DPS 自动配置了一堆 IoT 设备。这些设备已在我的 IoT 中心注册。所有设备都具有 X.509 证书身份验证。
我现在要做的是向设备发送消息。所有证书都可用,我可以使用 DeviceClient 连接到集线器上的设备。这是我正在使用的 Azure IoT Java SDK 的方法:
public static DeviceClient createFromSecurityProvider(String uri, String deviceId, SecurityProvider securityProvider, IotHubClientProtocol protocol) throws URISyntaxException, IOException
它以SecurityProviderX509Cert作为参数。
但是,每个 DeviceClient 都有自己的物理连接。我想要的是通过使用这个构造函数来使用 AMQP 多路复用:
public DeviceClient(String connString, TransportClient transportClient) throws URISyntaxException
这不适用于 X.509 设备。在连接字符串中,我使用了来自集线器的共享访问策略中的共享访问密钥,但出现异常:
未经授权:IotHub 'yyy' 上的设备 'xxx' 没有 PrimaryKey 或 SecondaryKey
我认为这只有在我使用对称密钥注册设备时才有效。但是,这些设备无法通过 Azure DPS 自动注册。我只能使用 X.509 或 TPM 注册设备。
那么如何获得通过单个 AMQPS 连接连接多个 X.509 设备的技巧呢?