Spring Integration DSL 动态入站通道

3

是否可以在运行时使用spring-integration-dsl注册MessageSources?

在我的情况下,我想要基于UI输入创建多个FileReadingMessageSources,然后将负载发送到特定的通道/ JMS路由(从元数据或用户输入中读取)

另一个问题是,是否可以动态注册IntegrationFlows?

1个回答

3

这有点棘手,需要一些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();
        }
    }

}

请调查我的示例并告诉我您不清楚的内容。

非常感谢,这正是我正在寻找的。 - Akroma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接