reconnection in mqtt receiver introduced

This commit is contained in:
Wolfgang Hottgenroth
2017-11-17 10:54:24 +01:00
parent bdb387b232
commit 401417d485
8 changed files with 56 additions and 6 deletions

View File

@ -4,10 +4,14 @@
<Console name="ConsoleAppender" target="SYSTEM_OUT">
<PatternLayout pattern="%d [%t, %F, %L] %-5level - %msg%n%throwable"/>
</Console>
<File name="FileAppender" fileName="/tmp/MeasurementCollector.log">
<PatternLayout pattern="%d [%t, %F, %L] %-5level - %msg%n%throwable"/>
</File>
</Appenders>
<Loggers>
<Root level="debug">
<AppenderRef ref="ConsoleAppender"/>
<AppenderRef ref="FileAppender"/>
</Root>
</Loggers>
</Configuration>

View File

@ -1,4 +1,4 @@
; mqtt.broker = tcp://172.16.2.15:1883
;mqtt.broker = tcp://172.16.2.15:1883
mqtt.broker = tcp://eupenstrasse20.dynamic.hottis.de:2883
mqtt.username = tron
mqtt.password = geheim123

View File

@ -4,9 +4,12 @@ import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.Properties;
import javax.management.RuntimeErrorException;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.eclipse.paho.client.mqttv3.IMqttMessageListener;
import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
import org.eclipse.paho.client.mqttv3.MqttCallbackExtended;
import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
import org.eclipse.paho.client.mqttv3.MqttException;
@ -23,10 +26,23 @@ public class MqttReceiver {
static final String MQTT_PASSWORD_PROP = "mqtt.password";
class Listener implements IMqttMessageListener {
class Callback implements MqttCallbackExtended {
public void messageArrived(String topic, MqttMessage payload) {
parsers.get(topic).execute(LocalDateTime.now(), payload.toString());
}
public void connectComplete(boolean reconnect, java.lang.String serverURI) {
logger.info("Connection established for " + serverURI);
}
public void connectionLost(java.lang.Throwable cause) {
logger.error("Connection lost, cause: " + cause.toString());
reconnect();
}
public void deliveryComplete(IMqttDeliveryToken token) {
}
}
private final String broker;
@ -34,7 +50,7 @@ public class MqttReceiver {
private final MqttConnectOptions connOpts;
private MqttClient client;
private HashMap<String, AMessageParser> parsers;
private final Listener listener = new Listener();
private final Callback callback = new Callback();
public MqttReceiver(Properties config) {
broker = config.getProperty(MQTT_BROKER_PROP, "localhost");
@ -53,6 +69,7 @@ public class MqttReceiver {
public void connect() throws MeasurementCollectorException {
try {
client = new MqttClient(broker, clientId);
client.setCallback(callback);
client.connect(connOpts);
logger.info("Connected");
} catch (MqttException e) {
@ -60,10 +77,35 @@ public class MqttReceiver {
}
}
public void reconnect() {
logger.error("reconnect called");
if (! client.isConnected()) {
while (true) {
try {
client.connect(connOpts);
for (String topic : parsers.keySet()) {
client.subscribe(topic);
logger.info("Re-Subscribed: " + topic);
}
logger.error("reconnecting successfully completed");
break;
} catch (MqttException e) {
logger.error("Exception during reconnection: " + e.toString());
try {
Thread.sleep(10*1000);
} catch (InterruptedException e1) {
}
}
}
} else {
logger.error("client is still connected");
}
}
public void registerParser(AMessageParser parser) throws MeasurementCollectorException {
try {
parsers.put(parser.getTopic(), parser);
client.subscribe(parser.getTopic(), listener);
client.subscribe(parser.getTopic());
logger.info("Subscribed: " + parser.getTopic());
} catch (MqttException e) {
throw new MeasurementCollectorException("MqttReceiver.registerParser", e);

View File

@ -4,10 +4,14 @@
<Console name="ConsoleAppender" target="SYSTEM_OUT">
<PatternLayout pattern="%d [%t, %F, %L] %-5level - %msg%n%throwable"/>
</Console>
<File name="FileAppender" fileName="/tmp/MeasurementCollector.log">
<PatternLayout pattern="%d [%t, %F, %L] %-5level - %msg%n%throwable"/>
</File>
</Appenders>
<Loggers>
<Root level="debug">
<AppenderRef ref="ConsoleAppender"/>
<AppenderRef ref="FileAppender"/>
</Root>
</Loggers>
</Configuration>

View File

@ -1,4 +1,4 @@
; mqtt.broker = tcp://172.16.2.15:1883
;mqtt.broker = tcp://172.16.2.15:1883
mqtt.broker = tcp://eupenstrasse20.dynamic.hottis.de:2883
mqtt.username = tron
mqtt.password = geheim123