使用max-messages-per-poll = 10和prevent-duplicates = false读取文件

时间:2012-10-23 19:01:42

标签: spring integration spring-integration inbound poller

我正在尝试从目录中读取文件。如果文件无法处理,它会留在那里稍后再试。

<file:inbound-channel-adapter prevent-duplicates="false" id="fileInput" directory="file:${java.io.dir}/input-data" auto-create-directory="true" filter="compositeFileFilterBean"/>

    <integration:poller id="poller" max-messages-per-poll="10" default="true" >
        <integration:interval-trigger interval="60" time-unit="SECONDS" />
    </integration:poller>

问题是如果max-messages-per-poll设置为10,则每个轮询将返回10条消息,即使只有1个文件(即所有10条消息都相同)。

2 个答案:

答案 0 :(得分:2)

是的,这将是这些设置的预期行为。

我不确定你为什么认为这是错误的。

如果目录中的文件未被过滤器过滤(例如防止重复过滤的文件),则轮询器将在当前轮询中找到该文件(当max-messages-per-poll时)是> 1)或下次投票。

要执行您想要的操作,您需要一个自定义过滤器,用于过滤先前在60秒轮询间隔内找到的文件。

答案 1 :(得分:0)

您可以: 选项1。在inbound-channel-adapter中将属性“ prevent-duplicates”设置为true。默认情况下,如果没有其他过滤器或文件正则表达式,则此属性为true。如果我们使用的是自定义过滤器,Springs会了解到我们的自定义过滤器将包含AcceptOnceFileListFilter,因此它将prevent-duplicates设置为false。

选项2。带有过滤器org.springframework.integration.file.filters.AcceptOnceFileListFilter的完整bean“ compositeFileFilterBean”