After the MQTTv5 client is reconnected successfully, it does not re-subscribe to the topics. I am unable to retrieve messages unless I reboot my application.
Spring Boot version: 3.0.2 MQTT integration version: 6.0.2
Here is the sample I am using:
@Configuration
class MnpConfiguration {
@Bean
fun mqttInputChannel(): MessageChannel {
return DirectChannel()
}
@Bean
fun clientManager(): ClientManager<IMqttAsyncClient, MqttConnectionOptions> {
val connectionOptions = MqttConnectionOptions()
connectionOptions.serverURIs = arrayOf("mqtt://localhost:1883")
connectionOptions.connectionTimeout = 3000
connectionOptions.maxReconnectDelay = 1000
connectionOptions.isAutomaticReconnect = true
val clientManager = Mqttv5ClientManager(connectionOptions, UUID.randomUUID().toString())
return clientManager
}
@Bean
fun inbound(): MessageProducer {
val manager = clientManager()
val adapter = Mqttv5PahoMessageDrivenChannelAdapter(
manager,
"TEST"
)
adapter.setCompletionTimeout(1000)
adapter.setPayloadType(String::class.java)
adapter.setQos(0)
adapter.outputChannel = mqttInputChannel()
return adapter
}
}
@Component
class MnpStream {
@Bean
@ServiceActivator(inputChannel = "mqttInputChannel")
fun handleMnpLicense() = MessageHandler {
println(String(it.payload as ByteArray))
}
}
When I try to add my custom callback that calls the adapter.connectComplete(false)
, the subscribers are re-subscribed and everything seems to work fine.
manager.addCallback {
if (it && !adapter.connectionInfo.isCleanStart) {
adapter.connectComplete(false)
}
}
Any help is welcome :)