Spring integration 如何在运行时注册集成流?
我正在为多个属性构建一个微服务。因此,每个属性都有不同的配置。为了做到这一点,我实现了这样的东西Spring integration 如何在运行时注册集成流?,spring-integration,spring-integration-dsl,Spring Integration,Spring Integration Dsl,我正在为多个属性构建一个微服务。因此,每个属性都有不同的配置。为了做到这一点,我实现了这样的东西 @Autowired IntegrationFlowContext flowContext; @Bean public void setFlowContext() { List<Login> loginList = DAO.getLoginList(); // a web service loginList.forEach
@Autowired
IntegrationFlowContext flowContext;
@Bean
public void setFlowContext() {
List<Login> loginList = DAO.getLoginList(); // a web service
loginList.forEach(e -> {
IntegrationFlow flow = IntegrationFlows.from(() -> e, c -> c.poller(Pollers.fixedRate(e.getPeriod(), TimeUnit.SECONDS, 5)))
.channel("X_CHANNEL")
.get();
flowContext.registration(flow).register();
});
}
@Bean
public IntegrationFlow setFlowContext() {
return IntegrationFlows
.from(this::getSpecification, p -> p.poller(Pollers.fixedRate(X))) // the specification is constant.
.transform(payload -> DAO.getLoginList(payload))
.split()
.<Login>handle((payload, header) -> {
IntegrationFlow flow = IntegrationFlows.from(() -> payload, c -> c.poller(Pollers.fixedRate(payload.getPeriod(), TimeUnit.SECONDS, 5)))
.channel("X_CHANNEL")
.get();
flowContext.registration(flow).register().start();
return null;
})
.get();
}
最后,我已经阅读了,但仍然无法实现此功能。动态流注册不能在
@Bean
定义中使用
它设计用于在应用程序上下文完全初始化后的运行时使用。是的。。。看起来他在他的第二个代码片段中正确地做到了……那么它是如何工作的呢?您不需要调用它
start()
,因为默认情况下它是自动启动的。我想知道你是否真的需要注册这个动态流。看起来您刚刚将登录
发送到该X\u频道
。为什么不从主流开始呢?您可能需要考虑使用幂等接收器
,以避免在下一次轮询中主流执行其内容时重复登录
:
flowContext.registration(flow).register().start();