我有spring
集成配置 ,其中我从目录中轮询文件,然后在后续步骤中处理这些文件。
我正在使用调度程序通道来处理允许轮询程序线程被释放并返回以在处理步骤发生时继续进行轮询的步骤。
这一点工作正常,直到达到线程池限制,此时由于CALLER_RUNS
拒绝策略,当轮询器将文件提交到处理步骤时,它最终在与停止的轮询器相同的线程中进行处理轮询过程将暂停,直到此步骤完成。
如何c * 彻底解耦此过程的两个阶段* ?
我的想法是使用两个任务执行者,一个用于民意调查,另一个用于调度员,但这似乎没有帮助。
<!-- Poll files from landing zone directory -->
<int-file:inbound-channel-adapter id="files" directory="${lz.dir.${ft}}" filename-regex=".*\.txt$">
<int:poller fixed-delay="3000" max-messages-per-poll="2" task-executor="pollingExecutor" />
</int-file:inbound-channel-adapter>
<int:bridge input-channel="files" output-channel="sourceFiles" />
<!-- Dispatch retrieved files -->
<int:channel id="sourceFiles">
<int:dispatcher task-executor="processingExecutor" />
</int:channel>
基本上我希望轮询过程永不停止。我们将不胜感激。
由于
答案 0 :(得分:0)
使用QueueChannel
; poller将文件转储到队列中,另一方面有一个轮询器将消息拉出队列。
默认情况下,队列无限制。
或者,当然,您可以在执行程序中使用无界队列。
但如果您的消费者无法跟上,您最终会遇到麻烦。