java - 在 Spring Boot 中添加具有不同客户端 ID 的 MQTT 连接

标签 java spring spring-boot mqtt paho

我的程序通过 MQTT 获取多个设备的实时数据。我正在使用 spring-integration-mqtt 版本 5.5.13。 MQTT 代理为每个设备使用不同的客户端 ID。使用静态和预定义的客户端 ID 一切都很好。当我尝试添加 MqttPahoMessageDrivenChannelAdapter 类的新适配器时,就会出现问题。问题是我做不到。

我已经为 MqttPahoClientFactoryMessageChannel 定义了一个 bean。我还有一个 MessageHandler 类的 bean,其注释如下:

@ServiceActivator(inputChannel = "mqttChannel") // mqttChannel is the adapter output channel

当我需要一个具有自己的客户端 ID 的新连接时,我调用下面的方法。

public MessageProducer inbound() {
        MqttPahoMessageDrivenChannelAdapter adapter =
                new MqttPahoMessageDrivenChannelAdapter("tcp://localhost:1883", "testClient",
                                                 "topic1", "topic2");
        adapter.setCompletionTimeout(5000);
        adapter.setConverter(new DefaultPahoMessageConverter());
        adapter.setQos(1);
        adapter.setOutputChannel(mqttInputChannel());
        return adapter;
    }

我猜它不会作为监听器提交,因为它不是 bean。我不知道是否可以在运行时添加一种类型的多个 bean。

我没有运气用不同的限定符定义 MessageProducer 类型的两个 bean。只有其中之一有效。

也许简单地调用入站方法不会连接和订阅?或者输出 channel 没有被调用?

我是 MQTT 新手,这是我第一次尝试这个。这也是我的第一个问题,所以我希望这是一个好问题:)

最佳答案

所以,我最终使用了 Eclipse Paho Client Mqttv3。它已经 2 年没有更新了,但它让我可以更直接地管理我的 mqtt 连接并完成工作。

关于java - 在 Spring Boot 中添加具有不同客户端 ID 的 MQTT 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73027970/

相关文章:

Spring Tool Suite真的很慢

java - 如何添加 15 分钟时间并处理溢出问题?

java - 将 Openfire-Server 集成(嵌入)到另一个 Java 项目中

java - 变量在 if 语句之外未更新

java - 与 "&&"和 "||"混淆

java - 使用 Java Config 的 Spring Security 自定义身份验证过滤器

java - Spring REST @Query 可变参数

spring - 使用 STOMP 订阅主题 Spring WebSocket 时未创建动态队列?

java - Spring Boot - 如何在 Spring RestController 的 map 中获取所有请求参数?

java - 在 Heroku 中使用 Spring Boot 应用程序发送电子邮件