Spring Mqtt集成-在Kotlin中类型不匹配,而相同的类型在Java中工作



我对Kotlin比较陌生。目前,我正在开发一个spring引导(3.0.5版)应用程序,该应用程序也通过spring-integration- MQTT库(6.0.4版)使用MQTT。因此,如果一切正常,我可以通过MQTTS发送和接收消息。现在我需要处理更多主题之间的消息,并希望为此配置一个共享客户机,如下所示:https://docs.spring.io/spring-integration/reference/html/mqtt.html#mqtt-shared-client

然而,当我把这个确切的例子转移到Kotlin

@Bean
fun clientManager(): ClientManager<IMqttAsyncClient, MqttConnectOptions> {
val connectionOptions = MqttConnectionOptions()
connectionOptions.serverURIs = arrayOf(brokerUrl)
connectionOptions.userName = username
connectionOptions.password = password.toByteArray()
connectionOptions.connectionTimeout = 30000;
connectionOptions.maxReconnectDelay = 1000;
connectionOptions.isAutomaticReconnect = true;
val clientManager = Mqttv5ClientManager(connectionOptions, clientId)
clientManager.setPersistence(MqttDefaultFilePersistence())
return clientManager
}

我得到以下错误:

Type mismatch: inferred type is Mqttv5ClientManager but ClientManager<IMqttAsyncClient, MqttConnectOptions> was expected

当我在Java中做同样的事情时,如Spring文档中所示,它工作得很好。对我来说,Kotlin似乎无法解决ClientManager接口的类层次结构。Javadoc明确指出Mqttv5ClientManager是ClientManager的已知实现。

我做错了什么?

您的问题是MqttConnectOptions,本质上是这个类:

org.eclipse.paho.client.mqttv3.MqttConnectOptions

对于MQTT v5它必须是这样的:

org.eclipse.paho.mqttv5.client.MqttConnectionOptions

因此你的bean定义必须像这样:

fun clientManager(): ClientManager<IMqttAsyncClient, MqttConnectionOptions> {

参见Mqttv5ClientManager类源代码。

相关内容

  • 没有找到相关文章

最新更新