【问题标题】:Spring Integration `RotatingServerAdvice` PollingSpring集成`RotatingServerAdvice`轮询
【发布时间】:2021-04-26 22:25:15
【问题描述】:

当RotatingServerAdvice 作为建议添加到Poller 时,如

PollerSpec pollerSpec = Pollers.cron(cronExpression)
                                       .advice(rotatingServerAdvice(sftpConfig, proxyConfig))
                                       .maxMessagesPerPoll(3)
                                       .errorChannel("errorChannel");

轮询器会在预定时间轮换每个RotationPolicy.KeyDirectory,还是会在每次轮询时检查一个目录?我已经检查了 Spring Integration Github repo 和参考文档中的示例,但我无法弄清楚这一点。我猜它应该是第一个,但我想确认一下。

【问题讨论】:

    标签: spring spring-boot spring-integration spring-integration-dsl spring-integration-sftp


    【解决方案1】:

    请澄清为什么您会发现投票的预定时间有差异?只有在调度程序执行任务时才会真正进行轮询。

    有一个fair 选项供您考虑。参见文档:https://docs.spring.io/spring-integration/docs/current/reference/html/ftp.html#ftp-rotating-server-advice

    【讨论】:

    • 澄清一下;因为你有maxMessagesPerPoll = 3;每次投票最多会调用 3 次建议(建议使用 MessageSource,因此在每次调用 receive() 之前/之后)。如果当前目录有0、1或2个文件且fair为false;轮换在下一次投票中进行; 3 或更多,轮换将发生在目录为空后的下一次轮询。如果fair为真且当前目录有1个或多个文件,则在返回第一个文件后进行轮换。
    • 谢谢@ArtemBilan 和@GaryRussell,这很有帮助。我很感激你们两个都可以回答问题。我想就我而言,我会将fair 保留为false,并根据@GaryRussell 的解释删除maxMessagesPerPoll 设置。
    • 对。这取决于具体情况,但 Gary 是正确的:每个消息都调用 RotatingServerAdvice 以从源进行轮询。因此,您的目录确实可能会在一个轮询周期内轮换 - 而不是等待下一个时间表。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-06
    • 2017-10-26
    • 2020-10-28
    • 1970-01-01
    • 2014-02-16
    • 1970-01-01
    相关资源
    最近更新 更多