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

在Corda中,如何在节点上定期/以固定间隔执行流?,corda,Corda,我希望Corda节点以固定的间隔(例如每秒)运行流。如何实现这一点?您应该使用服务。服务是节点内的长期对象。在我们的服务中,我们将定义一个启动方法,该方法每秒运行一个单独的线程来启动周期流: @CordaService class PeriodicService(val services: AppServiceHub): SingletonSerializeAsToken() { fun kickOff() { Thread { while (tr

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

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

@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()
    }
}
@InitiatingFlow
@StartableByService
class PeriodicFlow : FlowLogic<String>() {
    @Suspendable
    override fun call(): String {
        return "Flow called."
    }
}