У меня есть веб-сервер, который получает много сообщений в одну и ту же тему и возвращает ответные сообщения в другую тему.Повторное использование клиента MQTT для публикации/подписаться
В настоящее время я повторно использую тот же экземпляр клиента MQTT как для обратного вызова, так и для отправки ответных сообщений, постоянно поддерживая клиент MQTT.
Однако после одного цикла получения сообщения и отправки ответа я могу получить другое сообщение, но не могу отправить ответ - мне нужно перезагрузить сервер приложений.
Это хороший подход, чтобы иметь один экземпляр MQTTclient? Хорошо ли поддерживать связь все время? Каков наилучший подход для такого рода требований?
Вот мой код:
public static void registerCallBack(String topicName, String userName,
String password, String clientId, MqttCallback callback,
MqttClient client) {
MqttConnectOptions options = new MqttConnectOptions();
options.setCleanSession(true);
options.setKeepAliveInterval(30);
options.setUserName(userName);
options.setPassword(password.toCharArray());
// Connect to Broker
try {
options.setSocketFactory(SslUtil.getSocketFactory(
ManagerProps.MQTT_BROKER_CA_FILE.getValue(), ""));
client.setCallback(callback);
client.connect(options);
client.subscribe(topicName, 0);
log.info("successfuly registered callback to topic " + topicName);
} catch (MqttException me) {
log.error("MqttException, " + me);
} catch (Exception e) {
log.error("Exception, " + e);
}
}
public static String publishMessage(MqttClient client, String message,
String topic, String userName, String password) {
MqttConnectOptions options = new MqttConnectOptions();
options.setCleanSession(true);
options.setKeepAliveInterval(30);
options.setUserName(userName);
options.setPassword(password.toCharArray());
try {
MqttMessage msg = new MqttMessage();
msg.setPayload(message.getBytes());
client.publish(topic, msg);
} catch (MqttException e) {
log.error("MqttException, " + e);
} catch (Exception e) {
log.error("Exception, " + e);
}
return message;
}
Не могли бы вы добавить некоторые подробности о том, почему вы не в состоянии послать - исключения , блок по публикации, другой? –
Это определенно хорошо, чтобы иметь один экземпляр и определенно нормально, чтобы он все время подключался. Однако я не могу помочь с кодом. – ralight
@Anders Это странная вещь - нет никаких исключений или сообщений, которые так когда-либо были. когда я dubug его, я могу ясно видеть, что publish() выполняется без каких-либо исключений, но ничего не происходит ... –