我的程序通过MQTT为多个设备获取实时数据。我使用的是spring-integration-mqtt版本5.5.13。MQTT代理对每个设备使用不同的客户端ids。使用静态和预定义的客户端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。其中只有一个起作用了。
也许简单地调用入站方法就不会连接和订阅?还是没有调用输出通道?
我是MQTT的新手,这是我第一次尝试这个。这也是我的第一个问题,所以我希望这是一个好问题:)
发布于 2022-07-20 04:50:08
因此,我最终使用了Eclipse客户端Mqttv3。它已经两年没有更新了,但是它让我能够更直接地管理我的mqtt连接,并完成工作。
https://stackoverflow.com/questions/73027970
复制相似问题