【发布时间】:2016-05-31 14:13:44
【问题描述】:
我使用Spring Integration FTP 将文件从 FTP 服务器复制到本地并进行处理。使用 Spring Boot 和 Spring Integration 在本地运行良好,但我已经在 OpenShift 中部署了应用程序,但它不是在寻找 FTP 文件。
例如:
In local FileReadingMessageSource is getting invoked
[task-scheduler-5] o.s.i.file.FileReadingMessageSource : Created message: [GenericMessage [payload=file-temp\abcd.xml, headers={id=30e5289a-aba6-19db-1d81-3036fca251b0, timestamp=1464675579294}]]
但它不会在 OpenShift 中调用。它是否需要任何特殊配置才能工作?
【问题讨论】:
-
不需要什么特别的;也许是防火墙问题?我建议你打开 DEBUG 日志记录。
-
@GaryRussell 防火墙的配置与本地配置相同,记录器已经开启。在 spring boot 应用程序启动后,它应该开始复制文件,但它没有复制文件。
-
“不复制文件”只是信息不足。如果您没有看到该消息,则没有找到文件。如果你启用了调试日志并且你没有看到任何轮询活动(例如
Received no Message...),那么这意味着轮询器没有启动或者线程卡在某个地方——很可能是试图连接。您需要使用您的调试技能 - 使用 jstack、visualvm 等进行线程转储,并找出轮询线程在做什么。 -
@Bean(name = PollerMetadata.DEFAULT_POLLER) public PollerMetadata defaultPoller() { PollerMetadata pollerMetadata = new PollerMetadata(); pollerMetadata.setTrigger(new PeriodicTrigger(100));返回轮询元数据; } @ServiceActivator(inputChannel = "inputChannel") public void transferFilesFromFTP(File payload) { process(payload); @GaryRussell - 谢谢 Gary,我已经使用了上面的代码,问题是在部署的应用程序中,在处理父进程后,子线程没有得到处理 [task-scheduler] 调试后,线程没有被调用。
-
不要把代码放在cmets中;如您所见,它完全不可读。删除这些 cmets 并改为编辑问题(格式化代码)。如果你想让人们帮助你,你必须给他们一些合理的工作。如果它在一个环境中工作而不在另一个环境中工作,则可能是环境问题而不是 Spring 集成问题;您需要使用日志进一步调试它。比较一个环境与另一个环境的调试日志。如果这样做之后您怀疑框架有问题,请提供此类证据。
标签: openshift spring-integration openshift-origin openshift-cartridge openshift-enterprise