Я использую клиент HiveMQ MQTT в Spring для получения сообщений MQTT.
Конфигурация моего клиента выглядит так
public Mqtt3AsyncClient mqtt3Client() {
var mqtt3Client = Mqtt3Client.builder()
.serverHost("my.host")
.sslWithDefaultConfig()
.serverPort(0000)
.automaticReconnectWithDefaultConfig()
.buildBlocking();
mqtt3Client.connect();
return mqtt3Client.toAsync();
}
После того, как клиент доступен, с помощью клиента инициализируется другой Spring Bean. Подписывается на тему:
@PostConstruct
public void subscribeTopic() {
mqtt3AsyncClient.subscribeWith()
.topicFilter("topicfilter")
.qos(MqttQos.AT_LEAST_ONCE)
.callback(message -> {
/*Handle message*/
})
.send()
.whenComplete((mqtt3SubAck, throwable) -> {
if (throwable != null) {
/*Logging*/
} else {
/*Logging*/
}
});
}
Я несколько раз видел, что в мое приложение больше не доставлялись сообщения, в то время как я все еще мог использовать клиентское соединение для отправки сообщений (таким образом, оно было подключено в то время).
Мне не удалось найти никакой документации о том, как клиент HiveMQ MQTT обрабатывает настроенный automaticReconnectWithDefaultConfig()
. Может ли кто-нибудь указать, продлена ли повторная подписка на мою подписку, созданную в subscribeTopic()
? Я также нашел метод addSubscription()
, который может заменить часть .topicFilter(..).qos(...)
. Я также не смог найти никакой информации, делает ли это подписку более устойчивой к потерям соединения.
Буду признателен за любую информацию по этой теме.
Спасибо.