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