【问题标题】:spring-integration-mqtt With multiple Mqtt Servers for subscriptionspring-integration-mqtt 带有多个 Mqtt 服务器进行订阅
【发布时间】:2018-07-06 13:58:00
【问题描述】:

我正在使用 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 的返回类型更改为列表,但没有工作:

  @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,我可以从文本文件和 for 循环中获取 mqtt 服务器详细信息,或者我可以管理多个连接。

【问题讨论】:

    标签: spring-integration mqtt spring-bean spring-integration-mqtt


    【解决方案1】:

    Dynamic and runtime Integration Flows

    @Autowired
    private IntegrationFlowContext flowContext;
    
    private IntegrationFlowRegistration addAnAdapter(String uri, String clientId, MessageChannel channel,
            String... topics) {
        MqttPahoMessageDrivenChannelAdapter adapter = new MqttPahoMessageDrivenChannelAdapter(uri, clientId, topics);
        // more adapter configuration
        IntegrationFlow flow = IntegrationFlows.from(adapter)
            .channel(channel)
            .get();
        return this.flowContext.registration(flow).register();
    }
    
    private void removeAdapter(IntegrationFlowRegistration flowReg) {
        this.flowContext.remove(flowReg.getId());
    }
    

    【讨论】:

    • 上面的链接正在返回 404 错误。这是updated link
    • 谢谢;你的链接是博客;断开的链接指向文档;固定。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-29
    • 1970-01-01
    • 2023-01-12
    • 2017-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多