Spring 集成:带重试的 sftp-inbound-adapter
Spring integration: sftp-inbound-adapter with retry
我实现了一个 sftp-inbound-adapter,它应该在每天下午 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 开始,您可以使用 Smart Poller 根据是否有消息来调整轮询频率。
开箱即用的 SimpleActiveIdleMessageSourceAdvice
在有消息 Vs 时使用不同的固定延迟(通过 DynamicPeriodicTrigger
)。没有消息。
如果您不喜欢它的算法(它使用延迟,而不是 cron 表达式),您可以编写 AbstractMessageSourceAdvice
.
的自定义子类
我不确定你的 retryAdvice
bean 是什么,但重试通常只在出现异常时才适用。
编辑
我创建了一个更适合你的新建议;参见 the gist here。
你可以这样配置...
...
<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 触发器。
我实现了一个 sftp-inbound-adapter,它应该在每天下午 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 开始,您可以使用 Smart Poller 根据是否有消息来调整轮询频率。
开箱即用的 SimpleActiveIdleMessageSourceAdvice
在有消息 Vs 时使用不同的固定延迟(通过 DynamicPeriodicTrigger
)。没有消息。
如果您不喜欢它的算法(它使用延迟,而不是 cron 表达式),您可以编写 AbstractMessageSourceAdvice
.
我不确定你的 retryAdvice
bean 是什么,但重试通常只在出现异常时才适用。
编辑
我创建了一个更适合你的新建议;参见 the gist here。
你可以这样配置...
...
<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 触发器。