Ich versuche, eine kleine Anwendung zu schreiben, die viele Geräte simuliert, die Nachrichten über MQTT-Protokoll an einen iot-Hub mit der azure iot-device-client sdk-Version verbinden und senden: 1.3.31. Irgendwann wird dies Multithreading sein und es wird Tausende von simulierten Geräten gleichzeitig verbinden. Dies scheint mit dem Geräte-Client sdk nicht möglich zu sein. Kann das Gerät SDK auf diese Weise verwendet werden?Unterstützt das Azure iot-Gerät sdk mehrere Geräte, die gleichzeitig eine Verbindung herstellen?
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();
}
});
Als ich dies laufe ich jedes anderes Gerät erhalte die Verbindung mit dem Rest mit diesem Fehler forcably getrennt bekommen:
java.io.IOException: Unable to subscribe to topic :devices/sim_3/messages/devicebound/# because java.io.EOFExceptionConnection lost at com.microsoft.azure.sdk.iot.device.transport.mqtt.MqttIotHubConnection.open(MqttIotHubConnection.java:140) at com.microsoft.azure.sdk.iot.device.transport.mqtt.MqttTransport.open(MqttTransport.java:83) at com.microsoft.azure.sdk.iot.device.DeviceIO.open(DeviceIO.java:212) at com.microsoft.azure.sdk.iot.device.DeviceClient.open(DeviceClient.java:197) at com.company.Main.lambda$main$0(Main.java:49) at java.util.ArrayList.forEach(ArrayList.java:1249) at com.company.Main.main(Main.java:45)
ich unter der Annahme war, dass jeder DeviceClient eine separate MQTT Verbindung machen würde, wie ich für jeden unterschiedliche deviceId/Anmeldeinformationen tun liefern. Außerdem möchten wir auf das Messaging von Geräte-Twin- und Methoden zugreifen, das nicht über AMQP unterstützt wird. – darrickc