我对SchedulableState
的定义如下:
class MySchedulableState() : SchedulableState {
override val participants = listOf<Party>()
val nextActivityTime = Instant.ofEpochMilli(Instant.now().toEpochMilli() + 100)
override fun nextScheduledActivity(thisStateRef: StateRef, flowLogicRefFactory: FlowLogicRefFactory): ScheduledActivity? {
return ScheduledActivity(flowLogicRefFactory.create("com.template.ScheduledFlow", thisStateRef), nextActivityTime)
}
}
但是,当我在流中创建此状态时,计划的活动永远不会运行。什么
答案 0 :(得分:1)
问题在于,每次从库中提取状态时,您的节点都会使用状态的构造函数来重新创建状态。作为构造状态的一部分,Instant.now()
被再次调用并分配给nextActivityTime
,将计划的事件推向未来。
相反,您应按以下方式定义SchedulableState
:
class MySchedulableState(val now: Instant) : SchedulableState {
override val participants = listOf<Party>()
val nextActivityTime = Instant.ofEpochMilli(now.toEpochMilli() + 100)
override fun nextScheduledActivity(thisStateRef: StateRef, flowLogicRefFactory: FlowLogicRefFactory): ScheduledActivity? {
return ScheduledActivity(flowLogicRefFactory.create("com.template.ScheduledFlow", thisStateRef), nextActivityTime)
}
}
请注意我们如何在构造函数中传递当前时间。每次重构状态时,该值都不会更改(请注意,它必须是val
才能确保被序列化)。