Spring integration Spring集成:带重试的sftp入站适配器

Spring integration Spring集成:带重试的sftp入站适配器,spring-integration,Spring Integration,我实现了一个sftp入站适配器,它应该每天下午2点启动,如果结果为空(没有收到文件),我喜欢在2小时后重试一次 如何使用重试机制执行此操作? 我的源代码如下: <int-sftp:inbound-channel-adapter id="sftpInbondAdapter" auto-startup="true" channel="receiveChannel" session-factory="sftpSessionFactory" local-directory="fil

我实现了一个sftp入站适配器,它应该每天下午2点启动,如果结果为空(没有收到文件),我喜欢在2小时后重试一次

如何使用重试机制执行此操作? 我的源代码如下:

<int-sftp:inbound-channel-adapter id="sftpInbondAdapter"
    auto-startup="true" channel="receiveChannel" session-factory="sftpSessionFactory"
    local-directory="file:local-dir" remote-directory="/"
    auto-create-local-directory="true" delete-remote-files="false"
    filename-regex=".*\.txt$">

    <int:poller cron="0 0 14 * * ?"></int:poller>

    <int-sftp:request-handler-advice-chain>
        <ref bean="retryAdvice" />
    </int-sftp:request-handler-advice-chain>

</int-sftp:inbound-channel-adapter>

从4.2开始,您可以使用根据是否有消息来调整轮询频率

开箱即用的是
SimpleActiveIdleMessageSourceAdvice
,它在有消息和无消息时使用不同的固定延迟(通过
DynamicPeriodicTrigger

如果您不喜欢它的算法(它使用延迟,而不是cron表达式),可以编写
AbstractMessageSourceAdvice
的自定义子类

我不确定您的
retryAdvice
bean是什么,但重试通常仅在出现异常时适用

编辑

我创造了一个更适合你的新建议;看

您可以这样配置它

...
    <int:poller trigger="compoundTrigger">
        <int:advice-chain>
            <bean class="example.CompoundTriggerAdvice">
                <constructor-arg ref="compoundTrigger"/>
                <constructor-arg ref="secondary"/>
            </bean>
        </int:advice-chain>
    </int:poller>
...

<bean id="compoundTrigger" class="example.CompoundTrigger">
    <constructor-arg ref="primary" />
</bean>

<bean id="primary" class="org.springframework.scheduling.support.CronTrigger">
    <constructor-arg value="0 0 14 * * ?" />
</bean>

<bean id="secondary" class="org.springframework.scheduling.support.PeriodicTrigger">
    <constructor-arg value="7200000" />
</bean>
。。。
...

当没有收到消息时,我们将使用辅助触发器(2小时),否则使用cron触发器。

从4.2开始,您可以使用a根据是否有消息来调整轮询频率

开箱即用的是
SimpleActiveIdleMessageSourceAdvice
,它在有消息和无消息时使用不同的固定延迟(通过
DynamicPeriodicTrigger

如果您不喜欢它的算法(它使用延迟,而不是cron表达式),可以编写
AbstractMessageSourceAdvice
的自定义子类

我不确定您的
retryAdvice
bean是什么,但重试通常仅在出现异常时适用

编辑

我创造了一个更适合你的新建议;看

您可以这样配置它

...
    <int:poller trigger="compoundTrigger">
        <int:advice-chain>
            <bean class="example.CompoundTriggerAdvice">
                <constructor-arg ref="compoundTrigger"/>
                <constructor-arg ref="secondary"/>
            </bean>
        </int:advice-chain>
    </int:poller>
...

<bean id="compoundTrigger" class="example.CompoundTrigger">
    <constructor-arg ref="primary" />
</bean>

<bean id="primary" class="org.springframework.scheduling.support.CronTrigger">
    <constructor-arg value="0 0 14 * * ?" />
</bean>

<bean id="secondary" class="org.springframework.scheduling.support.PeriodicTrigger">
    <constructor-arg value="7200000" />
</bean>
。。。
...

当没有收到消息时,我们将使用辅助触发器(2小时),否则使用cron触发器。

thnak you Gary。但是我喜欢实现SimpleActiviedLemessagesourceAdvice,但在internet上没有可用的示例。如果有用的话,你能给我一个样品吗。但是我喜欢实现SimpleActiviedLemessagesourceAdvice,但在internet上没有可用的示例。你能给我一个样品吗?