Когда я запускаю свое приложение Springboot, я получаю «Получение java.lang.outofmemoryerr: java huep space»
, кажется, размер «org.eclipse.paho.mqttv5.client.internal.clientState». ? и Options.SetSessionExpiryInterval (4294967295L); < /p>
Так что, если экземпляр приложения умирает, то новый экземпляр продолжается так, как если бы он был тем же клиентом, поэтому оно потребляет сообщение, которое не использовалось ранее. < /p>
public void connect() {
try {
client = new MqttAsyncClient(brokerUrl, "my-client");
MqttConnectionOptions options = new MqttConnectionOptions();
options.setUserName(username);
options.setPassword(password.getBytes());
options.setAutomaticReconnect(true);
options.setCleanStart(false); // Persistent session
options.setSessionExpiryInterval(4294967295L); // Max session expiry
client.setCallback(new MqttCallback() {
@Override
public void messageArrived(String topic, MqttMessage message) {
executor.submit(() -> {
try {
String payload = new String(message.getPayload());
routeMessage(topic, payload);
} catch (Exception e) {
log.error("
}
});
}
@Override
public void disconnected(MqttDisconnectResponse disconnectResponse) {
log.warn("
}
@Override
public void mqttErrorOccurred(MqttException exception) {
log.error("
}
@Override
public void deliveryComplete(IMqttToken token) {
// Not used for subscriptions
}
@Override
public void connectComplete(boolean reconnect, String serverURI) {
log.info("
}
@Override
public void authPacketArrived(int reasonCode, MqttProperties properties) {
// Optional, unused
}
});
client.connect(options).waitForCompletion();
log.info("
for (String topic : topics) {
client.subscribe(topic, 2).waitForCompletion();
log.info("
}
} catch (MqttException e) {
log.error("
}
}
Подробнее здесь: https://stackoverflow.com/questions/797 ... aho-mqttv5