在我以前的生活中,我从事过几个Apache项目,所以我对EIP并不完全陌生,但我现在正在努力学习和理解Spring集成。我有(我认为是)一个“流”的小代码片段:
上的目录中。
FileReadingMessageSource fileSource = new FileReadingMessageSource();
fileSource.setBeanName("fileMessageSource");
fileSource.setDirectory(new File("C:/DestDir"));
fileSource.setAutoCreateDirectory(true);
DefaultFtpSessionFactory ftpSessionFactory = new DefaultFtpSessionFactory();
IntegrationFlow flow = IntegrationFlows.from(fileSource, configurer -> configurer.poller(Pollers.cron("0 0 * * *")))
.filter("*.png") // only allow PNG files through
.controlBus() // add a control bus
.handle(Ftp.outboundAdapter(ftpSessionFactory, FileExistsMode.FAIL)
.useTemporaryFileName(false)
.remoteDirectory("uploadDir"))
.get();诚然,在Spring术语中,我对“flow”和" channels“之间的区别有点不确定(我相信流是通道的组合,通道可能连接各个端点?),但我不明白,考虑到上面的代码,控制总线是如何利用来打开/关闭fileSource输入端点的。
我知道,通过控制总线,您可以向通道发送SPeL消息,而控制总线接受这些SPeL消息,并使用它们来确定要调用哪些bean/方法,但在上面,我从一个FileReadingMessageSource开始我的流。那么,我需要向哪个通道发送确切的消息,以便它停止/暂停或启动/重新启动FileReadingMessageSource端点?
这样做的想法是,如果我使用控制总线关闭FileReadingMessageSource,那么日复一日,任何PNG文件都不会上传到FTP服务器,直到我使用控制总线打开它为止。
谢谢你们的帮助!
发布于 2022-11-30 21:33:39
控制总线需要在它自己的流中,而不是在另一个流中的一个组件中;您可以向它发送控制消息,以控制其他端点。
在这个问题和答案中,请参阅最近的一个例子。
Using Control Bus EIP in Spring Integration to start/stop channels dynamically
https://stackoverflow.com/questions/74634331
复制相似问题