Servus,
ich bekomme Daten von einem MQTT Broker,
das können schon mal bis zu 1000 Datensätze pro Sekunde sein, meistens so aber um die 300 pro Sekunde. Diese Daten werden dann in der Methode
verarbeitet. Im Normalfall auch kein Problem da der Großtel (99,9%) der empfangenen Nachrichten einfach nur "durchläuft" ohne weitere Aktionen.
Einige Nachrichten allerdings brauchen länger (bis zu 4 Sekunden) ehe sie abgearbeitet sind da sie z.B. weitere Daten aus dem Internet laden oder Daten per MQTT an einen anderen Broker verschicken.
Jetzt habe ich natürlich die Vermutung das mir da Daten verloren gehen können, oder cached der paho mqtt client die Nachrichten und arbeite sie dann danach weiter ab ?
Oder soll ich die Methode
handleMqttAnswer(t, m)
jedesmal in einem neuen Thread aufrufen ?
Da hätte dann evtl ja auch den Nachteil das die Reihenfolge der Nachrichten nicht mehr stimmt.
Wenn sie geached werden wäre soweit eigentlich alles relativ OK ^^
ich bekomme Daten von einem MQTT Broker,
Java:
String broker = "tcp://server:1883";
String clientId = "Java";
MemoryPersistence persistence = new MemoryPersistence();
try {
mqttClient = new MqttClient(broker, clientId, persistence);
MqttConnectOptions connOpts = new MqttConnectOptions();
connOpts.setCleanSession(true);
connOpts.setAutomaticReconnect(true);
System.out.println("Connecting to broker: " + broker);
mqttClient.setCallback(new MqttCallback() {
@Override
public void connectionLost(Throwable throwable) {
System.out.println("#####################################");
System.out.println("Connection lost to broker: "+broker);
System.out.println(throwable.getCause());
throwable.printStackTrace();
}
@Override
public void messageArrived(String t, MqttMessage m) {
int iiii = m.toString().getBytes().length;
setReceivedBytes(iiii);
try {
handleMqttAnswer(t, m);
} catch (JSONException e) {
//
}
}
@Override
public void deliveryComplete(IMqttDeliveryToken arg0) {
// TODO Auto-generated method stub
}
});
mqttClient.connect(connOpts);
mqttClient.subscribe("Server/Data", 2);
} catch(MqttException me) {
//
} catch (Exception e) {
//
}
das können schon mal bis zu 1000 Datensätze pro Sekunde sein, meistens so aber um die 300 pro Sekunde. Diese Daten werden dann in der Methode
Java:
handleMqttAnswer(t, m);
verarbeitet. Im Normalfall auch kein Problem da der Großtel (99,9%) der empfangenen Nachrichten einfach nur "durchläuft" ohne weitere Aktionen.
Einige Nachrichten allerdings brauchen länger (bis zu 4 Sekunden) ehe sie abgearbeitet sind da sie z.B. weitere Daten aus dem Internet laden oder Daten per MQTT an einen anderen Broker verschicken.
Jetzt habe ich natürlich die Vermutung das mir da Daten verloren gehen können, oder cached der paho mqtt client die Nachrichten und arbeite sie dann danach weiter ab ?
Oder soll ich die Methode
handleMqttAnswer(t, m)
jedesmal in einem neuen Thread aufrufen ?
Da hätte dann evtl ja auch den Nachteil das die Reihenfolge der Nachrichten nicht mehr stimmt.
Wenn sie geached werden wäre soweit eigentlich alles relativ OK ^^