Spring 集成 DSL 动态入站渠道
Spring Integration DSL Dynamic Inbound Channel
是否可以在运行时使用 spring-integration-dsl 注册 MessageSources?
在我的例子中,我想创建多个 FileReadingMessageSources(基于来自 UI 的输入),然后将负载发送到特定的 channel/jms 路由(从元数据或用户输入中读取)
另一个问题是,是否可以动态注册 IntegrationFlows?
这有点棘手,需要一些 Spring 基础设施知识,但这是可能的:
@Service
public static class MyService {
@Autowired
private AutowireCapableBeanFactory beanFactory;
@Autowired
@Qualifier("dynamicAdaptersResult")
PollableChannel dynamicAdaptersResult;
public void pollDirectories(File... directories) {
for (File directory : directories) {
StandardIntegrationFlow integrationFlow = IntegrationFlows
.from(s -> s.file(directory),
e -> e.poller(p -> p.fixedDelay(1000))
.id(directory.getName() + ".adapter"))
.transform(Transformers.fileToString(),
e -> e.id(directory.getName() + ".transformer"))
.channel(this.dynamicAdaptersResult)
.get();
this.beanFactory.initializeBean(integrationFlow, directory.getName());
this.beanFactory.getBean(directory.getName() + ".transformer", Lifecycle.class).start();
this.beanFactory.getBean(directory.getName() + ".adapter", Lifecycle.class).start();
}
}
}
请调查我的样本,让我知道您不清楚的地方。
是否可以在运行时使用 spring-integration-dsl 注册 MessageSources?
在我的例子中,我想创建多个 FileReadingMessageSources(基于来自 UI 的输入),然后将负载发送到特定的 channel/jms 路由(从元数据或用户输入中读取)
另一个问题是,是否可以动态注册 IntegrationFlows?
这有点棘手,需要一些 Spring 基础设施知识,但这是可能的:
@Service
public static class MyService {
@Autowired
private AutowireCapableBeanFactory beanFactory;
@Autowired
@Qualifier("dynamicAdaptersResult")
PollableChannel dynamicAdaptersResult;
public void pollDirectories(File... directories) {
for (File directory : directories) {
StandardIntegrationFlow integrationFlow = IntegrationFlows
.from(s -> s.file(directory),
e -> e.poller(p -> p.fixedDelay(1000))
.id(directory.getName() + ".adapter"))
.transform(Transformers.fileToString(),
e -> e.id(directory.getName() + ".transformer"))
.channel(this.dynamicAdaptersResult)
.get();
this.beanFactory.initializeBean(integrationFlow, directory.getName());
this.beanFactory.getBean(directory.getName() + ".transformer", Lifecycle.class).start();
this.beanFactory.getBean(directory.getName() + ".adapter", Lifecycle.class).start();
}
}
}
请调查我的样本,让我知道您不清楚的地方。