在Corda中,如何在节点上定期/以固定间隔执行流?

时间:2018-09-19 08:55:24

标签: corda

我希望我的Corda节点以固定的时间间隔运行流,例如每一秒。我该如何实现?

1 个答案:

答案 0 :(得分:1)

您应该使用一项服务。服务是节点内的长期对象。在我们的服务中,我们将定义一个kickOff方法,该方法运行一个单独的线程以每秒启动我们的PeriodicFlow

@CordaService
class PeriodicService(val services: AppServiceHub): SingletonSerializeAsToken() {
    fun kickOff() {
        Thread {
            while (true) {
                services.startFlow(PeriodicFlow())
                Thread.sleep(1000)
            }
        }.start()
    }
}

这是调用kickOff方法的流程。请注意使用ServiceHub.cordaService来检索服务对象。

@InitiatingFlow
@StartableByRPC
class KickOff : FlowLogic<Unit>() {
    override val progressTracker = ProgressTracker()

    @Suspendable
    override fun call() {
        serviceHub.cordaService(PeriodicService::class.java).kickOff()
    }
}

这是您的节点运行的简单流程。请注意@StartableByService批注,该批注允许服务运行流。

@InitiatingFlow
@StartableByService
class PeriodicFlow : FlowLogic<String>() {
    @Suspendable
    override fun call(): String {
        return "Flow called."
    }
}