在流程的某个点计划执行
Scheduled execution at a certain point of a flow
我需要执行以下操作的功能:
在流程的某个点,执行暂停到指定时间。
(这就像在指定时间之前所有消息都保留在某个地方时的停车/暂存)
因此,如果您为那个时间设置 2016-04-20 11:12:00(理想情况下它由 cron 表达式指定)直到那个时候一切都暂停了。 (流不继续处理消息)如果指定的时间过去了,则工作流从该 'staging' 组件所在的点继续执行。
是否可以通过 Spring 集成来做到这一点?
应该如何实施?
实际上 defaultDelay
对应 DelayHandler
可以从日期值计算:
@Autowired
@Qualifier("myDelayer.handler")
private DelayHandler myDelayer;
...
Date nextDate = ...
myDelayer.setDefaultDelay(nextDate.getTime() - System.currentTimeMillis());
并在启动您的应用程序后在某处使用此代码,例如ContextRefreshedEvent
.
或者您可以将所需的 Date
放入消息 header 并使用 delay-expression
。
从另一端,您可以将消息发送到 QueueChannel
并使用来自端点 <poller>
的所需 cron
,端点应该轮询来自 queue 的消息.
如果您有这么长的 delay
时间来处理这些消息,您应该考虑在 QueueChannel
.
上使用 persistent
MessageStore
我需要执行以下操作的功能:
在流程的某个点,执行暂停到指定时间。 (这就像在指定时间之前所有消息都保留在某个地方时的停车/暂存) 因此,如果您为那个时间设置 2016-04-20 11:12:00(理想情况下它由 cron 表达式指定)直到那个时候一切都暂停了。 (流不继续处理消息)如果指定的时间过去了,则工作流从该 'staging' 组件所在的点继续执行。
是否可以通过 Spring 集成来做到这一点?
应该如何实施?
实际上 defaultDelay
对应 DelayHandler
可以从日期值计算:
@Autowired
@Qualifier("myDelayer.handler")
private DelayHandler myDelayer;
...
Date nextDate = ...
myDelayer.setDefaultDelay(nextDate.getTime() - System.currentTimeMillis());
并在启动您的应用程序后在某处使用此代码,例如ContextRefreshedEvent
.
或者您可以将所需的 Date
放入消息 header 并使用 delay-expression
。
从另一端,您可以将消息发送到 QueueChannel
并使用来自端点 <poller>
的所需 cron
,端点应该轮询来自 queue 的消息.
如果您有这么长的 delay
时间来处理这些消息,您应该考虑在 QueueChannel
.
persistent
MessageStore