Java Azure iot设备sdk是否支持多个设备同时连接?

Java Azure iot设备sdk是否支持多个设备同时连接?,java,azure,azure-iot-hub,Java,Azure,Azure Iot Hub,我正在尝试编写一个小应用程序,模拟许多设备使用azure iot设备客户端sdk版本1.3.31通过MQTT协议连接并发送消息到iot集线器。最终这将是多线程的,它将有数千个模拟设备同时连接。这在设备客户端sdk中似乎不可能实现。设备sdk可以这样使用吗 IotHubClientProtocol protocol = IotHubClientProtocol.MQTT; List<String> conns = new ArrayList<>(); //conns.ad

我正在尝试编写一个小应用程序,模拟许多设备使用azure iot设备客户端sdk版本1.3.31通过MQTT协议连接并发送消息到iot集线器。最终这将是多线程的,它将有数千个模拟设备同时连接。这在设备客户端sdk中似乎不可能实现。设备sdk可以这样使用吗

IotHubClientProtocol protocol = IotHubClientProtocol.MQTT;

List<String> conns = new ArrayList<>();
//conns.add() 10 times with correct connection strings    

conns.forEach((newConnString) -> {
    try {
        DeviceClient client = new DeviceClient(newConnString, protocol);

        client.open();
        System.out.println("connected - "+newConnString);

    } catch (Exception e) {
        e.printStackTrace();
    }
});
IotHubClientProtocol=IotHubClientProtocol.MQTT;
List conns=new ArrayList();
//使用正确的连接字符串连接10次
conns.forEach((newConnString)->{
试一试{
DeviceClient客户端=新的DeviceClient(newConnString,协议);
client.open();
System.out.println(“已连接-”+新连接字符串);
}捕获(例外e){
e、 printStackTrace();
}
});
当我运行此命令时,我发现其他所有与其余设备连接的设备都会因为以下错误而断开连接:

java.io.IOException:无法订阅主题:devices/sim_3/messages/devicebound/#,因为java.io.eofeexception连接丢失 位于com.microsoft.azure.sdk.iot.device.transport.mqtt.MqttIotHubConnection.open(MqttIotHubConnection.java:140) 位于com.microsoft.azure.sdk.iot.device.transport.mqtt.MqttTransport.open(MqttTransport.java:83) 位于com.microsoft.azure.sdk.iot.device.DeviceIO.open(DeviceIO.java:212) 在com.microsoft.azure.sdk.iot.device.DeviceClient.open(DeviceClient.java:197)上 com.company.Main.lambda$Main$0(Main.java:49) forEach(ArrayList.java:1249) 位于com.company.Main.Main(Main.java:45)


对于MQTT协议,不支持通过同一TLS连接同时连接多个设备

对于您的用例,您可以选择AMQP。它支持跨设备的连接多路复用


参考:.

对于MQTT协议,不支持通过同一TLS连接同时连接多个设备

对于您的用例,您可以选择AMQP。它支持跨设备的连接多路复用


参考:.

除了Rita的答案之外,我建议每个模拟MQTT设备使用自己的AppDomain和轻量级(原始)MQTT客户端库(例如)。 此概念已在中使用,其中每个MQTT设备在自己的AppDomain中被隔离、托管、订阅和发布。以下屏幕片段显示了连接到Azure IoT集线器的30个虚拟MQTT设备:


除了Rita的答案之外,我建议每个模拟MQTT设备使用自己的AppDomain和轻量级(原始)MQTT客户端库(例如)。 此概念已在中使用,其中每个MQTT设备在自己的AppDomain中被隔离、托管、订阅和发布。以下屏幕片段显示了连接到Azure IoT集线器的30个虚拟MQTT设备:


我假设每个DeviceClient将建立一个单独的mqtt连接,因为我确实为每个客户端提供了不同的deviceId/凭据。此外,我们还希望访问AMQP不支持的设备twin和消息传递方法。我假设每个设备客户端都会建立一个单独的mqtt连接,因为我确实为每个设备提供了不同的设备ID/凭据。此外,我们还希望访问AMQP不支持的设备孪生方法和消息传递。