问题描述
我正在通过Spring集成开发一种多属性微服务。我从LOGIN表之类的数据库中获取每个属性的登录凭据。 LOGIN表具有以下字段; LOGIN.username,LOGIN.pass和LOGIN.period(轮询周期)。如果我想根据LOGIN.period字段使用具有不同轮询器配置的微服务,该怎么做?
validate
是否有可能基于数据库中的LOGIN.period值来实现一个组件,以使工作流以不同的轮询器配置?
解决方法
基于Artem Bilan的回答,我实现了IntegrationFlowContext和IntegrationFlow实例;
@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();
});
}
,
请显示如何从数据库中获取该信息。
但是,如果您认为您可能在数据库中有多个记录,并且想要为所有记录都具有多个轮询器,那么您需要查看动态流注册:https://docs.spring.io/spring-integration/docs/5.3.2.RELEASE/reference/html/dsl.html#java-dsl-runtime-flows
因此,您从数据库读取数据,在循环中为每条记录创建IntegrationFlow
,并根据记录中的数据配置其轮询器。