如何在 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 个步骤即可使用它:
- 从 Spring 上下文中获取
IntegrationFlowContext
bean,例如通过自动装配:
@Autowired
public MyClass(IntegrationFlowContext flowContext) {
this.flowContext = flowContext;
}
- 用它建立新的流程,例如:
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
- 当需要删除动态创建的流时,只需使用您在上一步中获得的注册 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。
感谢关注
我在我的项目中使用了 spring 集成,我想从具有不同地址的多个 ftp 服务器检索许多输入文件,如下图所示:
如何在我的项目中动态创建 inbound-adapter
以从服务器轮询和检索文件?
见dynamic-ftp sample。虽然它只涵盖出站端,但 README 中有一些链接可以讨论入站端需要做什么(将每个适配器放在一个子上下文中,该子上下文将消息发送到主上下文中的通道)。
另请参阅我对
你应该能够使用那里使用的技术。
如果您被允许在您的项目中使用非"General Availability" (GA) 版本的第 3 方库(例如发布候选 (RC) 或里程碑 (M)),那么您可以使用版本 5.0.0.M2
的 Spring 集成。这是截至 2017 年 3 月 9 日的最新 published 版本。
从 5.0
开始,Spring 集成包括 Java DSL 运行时流注册功能。它允许您像在标准 bean 中那样定义集成流(包括入站适配器),但它可以在任何运行时时刻完成。
您只需执行以下 3 个步骤即可使用它:
- 从 Spring 上下文中获取
IntegrationFlowContext
bean,例如通过自动装配:
@Autowired
public MyClass(IntegrationFlowContext flowContext) {
this.flowContext = flowContext;
}
- 用它建立新的流程,例如:
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
- 当需要删除动态创建的流时,只需使用您在上一步中获得的注册 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。