我有一个spring-integration流程,它以一个由事务轮询器激活的文件入站通道适配器开始(tx由atomikos处理)。 处理文件中的文本,消息在流中向下发送,直到它被发送到其中一个JMS队列(JMS出站通道适配器)。 在中间,嵌套事务中有一些数据库写入。 该系统旨在全天候运行。
发生单个消息流,逐渐减慢,当我调查时,我发现负责增加延迟的阶段是从文件系统读取。
下面是整合流程的第一部分:
<logging-channel-adapter id="logger" level="INFO"/>
<transaction-synchronization-factory id="sync-factory">
<after-commit expression="payload.delete()" channel="after-commit"/>
</transaction-synchronization-factory>
<service-activator input-channel="after-commit" output-channel="nullChannel" ref="tx-after-commit-service"/>
<!-- typeb inbound from filesystem -->
<file:inbound-channel-adapter id="typeb-file-inbound-adapter"
auto-startup="${fs.typeb.enabled:true}"
channel="typeb-inbound"
directory="${fs.typeb.directory.in}"
filename-pattern="${fs.typeb.filter.filenamePattern:*}"
prevent-duplicates="${fs.typeb.preventDuplicates:false}" >
<poller id="poller"
fixed-delay="${fs.typeb.polling.millis:1000}"
max-messages-per-poll="${fs.typeb.polling.numMessages:-1}">
<transactional synchronization-factory="sync-factory"/>
</poller>
</file:inbound-channel-adapter>
<channel id="typeb-inbound">
<interceptors>
<wire-tap channel="logger"/>
</interceptors>
</channel>
我读了一些与prevent-duplicates选项相关的问题,该选项存储了所见文件的列表,但事实并非如此,因为我将其关闭了。 我不认为它可能与过滤器(文件名模式)有关,因为我在配置中使用的表达式(* .RCV)很容易应用,输入文件夹不包含很多文件(少而不是100)同时。
但是,随着时间的推移,有些东西会逐渐使文件系统的读取速度变慢,从几毫秒到超过3秒,在几天的正常运行时间内。
任何提示?
答案 0 :(得分:0)
答案 1 :(得分:0)
最后我找到了解决方案。 问题与我正在使用的特定版本的Spring(4.3.4)有关,该版本受我尚未发现的错误的影响。 问题在于有关DefaultConversionService以及使用converterCache的问题(有关更多详细信息,请参见https://jira.spring.io/browse/SPR-14929)。 升级到最新版本已解决。