我希望我的Corda节点以固定的时间间隔运行流,例如每一秒。我该如何实现?
答案 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."
}
}