如何在 spring 集成中动态创建 ftp 适配器?

how dynamic create ftp adapter in spring integration?

感谢关注
我在我的项目中使用了 spring 集成,我想从具有不同地址的多个 ftp 服务器检索许多输入文件,如下图所示:

如何在我的项目中动态创建 inbound-adapter 以从服务器轮询和检索文件?

dynamic-ftp sample。虽然它只涵盖出站端,但 README 中有一些链接可以讨论入站端需要做什么(将每个适配器放在一个子上下文中,该子上下文将消息发送到主上下文中的通道)。

另请参阅我对 and then a 的回答。

你应该能够使用那里使用的技术。

如果您被允许在您的项目中使用非"General Availability" (GA) 版本的第 3 方库(例如发布候选 (RC) 或里程碑 (M)),那么您可以使用版本 5.0.0.M2 的 Spring 集成。这是截至 2017 年 3 月 9 日的最新 published 版本。

5.0 开始,Spring 集成包括 Java DSL 运行时流注册功能。它允许您像在标准 bean 中那样定义集成流(包括入站适配器),但它可以在任何运行时时刻完成。

您只需执行以下 3 个步骤即可使用它:

  1. 从 Spring 上下文中获取 IntegrationFlowContext bean,例如通过自动装配:
  @Autowired
  public MyClass(IntegrationFlowContext flowContext) {
    this.flowContext = flowContext;
  }
  1. 用它建立新的流程,例如:
  IntegrationFlowRegistration registration = flowContext
      .registration(IntegrationFlows   // this method accepts IntegrationFlow instance
                        .from(s -> s.ftp(ftpSessionFactory())
                                    .localFilter(localFileFilter())
                        //other actions
                        .get())        // standard end of DSL flow building process
      .autoStartup(true)               // not required but can be useful
      .register();                     // this makes the flow exist in the context
  1. 当需要删除动态创建的流时,只需使用您在上一步中获得的注册 ID 再次参考 IntegrationFlowContext
// retrieve registration ID from the object created above
String dynamicFlowRegistrationId = registration.getId();
// the following will also gracefully stop all the processes within the flow
flowContext.remove(dynamicFlowRegistrationId);

GitHub 上还有一个 DynamicTcpClient sample