是否可以从数据源为每个实体配置轮询器?
Is it possible to configure poller for each entity from a data source?
我正在通过 spring 集成开发多 属性 微服务。我正在从 LOGIN table 等数据库中获取每个 属性 的登录凭据。 LOGIN table 有这些字段; LOGIN.username、LOGIN.pass 和 LOGIN.period(投票者的周期)。如果我想让基于 LOGIN.period 字段的不同轮询器配置的微服务工作,我该怎么做?
@Bean
public IntegrationFlow start() {
return IntegrationFlows
.from(() -> DAO.getLoginList()) // from a web service.
.split() // splits the each login credentials for each property.
.channel("X_CHANNEL") // subscribes to a channel todo business logic.
.get();
}
是否可以实现一个组件,根据数据库中的 LOGIN.period 值在不同的轮询器配置中进行工作?
请说明您是如何从数据库中获取该信息的。
但是如果您的观点是您可能在数据库中有多个记录并且您希望为所有这些记录设置多个轮询器,那么您需要查看动态流注册:https://docs.spring.io/spring-integration/docs/5.3.2.RELEASE/reference/html/dsl.html#java-dsl-runtime-flows
因此,您从数据库中读取数据,在循环中为每条记录创建 IntegrationFlow
并根据记录中的数据配置它们的轮询器。
根据 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();
});
}
我正在通过 spring 集成开发多 属性 微服务。我正在从 LOGIN table 等数据库中获取每个 属性 的登录凭据。 LOGIN table 有这些字段; LOGIN.username、LOGIN.pass 和 LOGIN.period(投票者的周期)。如果我想让基于 LOGIN.period 字段的不同轮询器配置的微服务工作,我该怎么做?
@Bean
public IntegrationFlow start() {
return IntegrationFlows
.from(() -> DAO.getLoginList()) // from a web service.
.split() // splits the each login credentials for each property.
.channel("X_CHANNEL") // subscribes to a channel todo business logic.
.get();
}
是否可以实现一个组件,根据数据库中的 LOGIN.period 值在不同的轮询器配置中进行工作?
请说明您是如何从数据库中获取该信息的。
但是如果您的观点是您可能在数据库中有多个记录并且您希望为所有这些记录设置多个轮询器,那么您需要查看动态流注册:https://docs.spring.io/spring-integration/docs/5.3.2.RELEASE/reference/html/dsl.html#java-dsl-runtime-flows
因此,您从数据库中读取数据,在循环中为每条记录创建 IntegrationFlow
并根据记录中的数据配置它们的轮询器。
根据 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();
});
}