Запланированные действия никогда не запускаются - PullRequest
0 голосов
/ 26 июня 2018

Я определил 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)
    }
}

Однако, когда я создаю это состояние в потоке, запланированное действие никогда не выполняется. Wh

1 Ответ

0 голосов
/ 26 июня 2018

Проблема в том, что ваш узел использует конструктор состояния для воссоздания состояния каждый раз, когда вы извлекаете его из хранилища. Как часть построения состояния, 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, чтобы гарантировать его сериализацию).

...