我正在使用可调度状态,并且我的状态具有以下方法,
eval
我的SFLow被标记为@ IntitiatingFLow,@ SchedulableFlow。但是我没有让这个流程运行。每隔10秒钟,我会看到此打印声明“计划内活动” 。不知道这里出了什么问题...
答案 0 :(得分:1)
该节点有一个ScheduledActivityObserver
,用于订阅添加到保管库的新状态的提要。每当将新状态添加到Vault中时:
SchedulableState
SchedulableState
,那么观察者会调用nextScheduledActivity
来确定在哪个未来时间点运行计划的活动,并将计划的活动添加到其计划中一旦到达此将来的时间点,观察者再次呼叫nextScheduledActivity
,以检索计划的活动以及应该发生计划的活动的时间点< / p>
在您的情况下,nextScheduledActivity
通过致电Instant.now().plusSeconds(10)
来找到计划活动的时间点。由于每次调用nextScheduledActivity
时都会重新表达此表达式,因此观察者将始终认为该活动已被重新安排为将来的10秒,并且永远不会运行。
相反,您需要评估时间点,以在状态创建时彻底运行计划的活动。例如:
class HeartState(
private val me: Party,
private val nextActivityTime: Instant = Instant.now().plusSeconds(1)
) : SchedulableState {
override val participants get() = listOf(me)
override fun nextScheduledActivity(thisStateRef: StateRef, flowLogicRefFactory: FlowLogicRefFactory): ScheduledActivity? {
val flowLogicRef = flowLogicRefFactory.create(HeartbeatFlow::class.java, thisStateRef)
ScheduledActivity(flowLogicRef, nextActivityTime)
}
}