我正在使用Spring的spring-integration-mqtt,我可以连接到单个Mqtt服务器并可以接收有关已订阅主题的消息,现在我想制作可以连接到多个Mqtt服务器并可以从每个连接接收数据的应用程序,我想要以动态方式进行管理,可以从数据库或文本文件中添加更多Mqtt服务器。
单个用于订阅的Mqtt连接的简单bean如下
@Bean public MessageProducer inbound() { MqttPahoMessageDrivenChannelAdapter adapter2 = new MqttPahoMessageDrivenChannelAdapter("tcp://192.168.100.1:1883","mqtt_virtual_received_sus_2", "DATA/#", "LD/#","CONF/#","CONFIG/#"); adapter2.setCompletionTimeout(0); adapter2.setConverter(new DefaultPahoMessageConverter()); adapter2.setQos(2); adapter2.setOutputChannel(mqttInputChannel()); return adapter2; }
上面的代码为mqtt服务器创建了一个连接,并且可以接收消息,如果我复制了两次相同的代码,以使用不同的Mqtt ip地址为第二台服务器粘贴了两次,则我可以如下所示连接到两个Mqtt服务器
@Bean public MessageProducer inbound() { MqttPahoMessageDrivenChannelAdapter adapter2 = new MqttPahoMessageDrivenChannelAdapter("tcp://192.168.100.1:1883","mqtt_virtual_received_sus_2", "DATA/#", "LD/#","CONF/#","CONFIG/#"); adapter2.setCompletionTimeout(0); adapter2.setConverter(new DefaultPahoMessageConverter()); adapter2.setQos(2); adapter2.setOutputChannel(mqttInputChannel()); return adapter2; } @Bean public MessageProducer inbound2() { MqttPahoMessageDrivenChannelAdapter adapter2 = new MqttPahoMessageDrivenChannelAdapter("tcp://192.168.100.14:1883","mqtt_virtual_received_sus_1", "DATA/#", "LD/#","CONF/#","CONFIG/#"); adapter2.setCompletionTimeout(0); adapter2.setConverter(new DefaultPahoMessageConverter()); adapter2.setQos(2); adapter2.setOutputChannel(mqttInputChannel()); return adapter2; }
上面的代码也可以正常工作,并且我可以从两个Mqtt服务器接收消息,但是有什么办法可以动态管理它,如下所示,我将bean的返回类型更改为list,但是没有用:
@Bean public List<MqttPahoMessageDrivenChannelAdapter> getAdapter () { List<MqttPahoMessageDrivenChannelAdapter > logConfList=new ArrayList<MqttPahoMessageDrivenChannelAdapter>(); MqttPahoMessageDrivenChannelAdapter adapter2 = new MqttPahoMessageDrivenChannelAdapter("tcp://192.168.100.1:1883","mqtt_virtual_received_sus_2", "DATA/#", "LD/#","CONF/#","CONFIG/#"); adapter2.setCompletionTimeout(0); adapter2.setConverter(new DefaultPahoMessageConverter()); adapter2.setQos(2); adapter2.setOutputChannel(mqttInputChannel() ); MqttPahoMessageDrivenChannelAdapter adapter = new MqttPahoMessageDrivenChannelAdapter("tcp://192.168.100.14:1883","mqtt_virtual_received_sus_1", "DATA/#", "LD/#","CONF/#","CONFIG/#"); adapter.setCompletionTimeout(0); adapter.setConverter(new DefaultPahoMessageConverter()); adapter.setQos(2); adapter.setOutputChannel(mqttInputChannel() ); logConfList.add(adapter); logConfList.add(adapter2); return logConfList; }
有什么办法可以动态管理这些bean,在哪里可以从文本文件中获取mqtt服务器详细信息,并且可以在for循环中进行管理,或者可以管理多个连接。