akka 如何添加要发送到masterRegistryActor的重复计划

92dk7w1h  于 2022-11-05  发布在  其他
关注(0)|答案(1)|浏览(151)
def main(args: Array[String]): Unit = {

    val rootBehavior = Behaviors.setup[Nothing] { context =>
      val masterRegistryActor = context.spawn(Master(), "MasterActor")
      context.watch(masterRegistryActor)

      masterRegistryActor ! Master.Watchlist("TSLA")
      masterRegistryActor ! Master.Watchlist("NVDA")

      Behaviors.empty
    }

    implicit val system = ActorSystem[Nothing](rootBehavior, AppConfig.name)
    implicit val executionContext = system.executionContext

}

我使用的是akka类型,你可以看到,我想知道我可以做以下:
1.如何在重复的时间范围内安排日程,目前我只能这样做:
(50毫秒,主注册执行元,主监视列表(“AAPLE”))
我在Behaviors.Setup里面做了这个,由于某些原因,system.scheduler.schedule(...)API不可用,为什么以及如何解决这个问题?
1.我的另一个困惑是,既然我的masterRegistryActor在我的rootBehavior内部,我如何从外部引用它呢?我想让这个执行元在我的应用程序中可用,就像根/全局执行元一样,但这是我找到的唯一生成它的方法。

bvjxkvbb

bvjxkvbb1#

让我们假设Master实际上是Behavior[MasterMessage],并且定义如下

trait MasterMessage
case object RepeatMasterMessage extends MasterMessage

object Master {
  def apply[MasterMessage]() =
    Behaviors.setup { context => 
      // master behaviour
    }
}

然后,您可以将Master行为 Package 到Behaviors.withTimer中。

trait MasterMessage
case object RepeatMasterMessage extends MasterMessage

case object RepeatMasterMessageTimerKey

object Master {
  def apply[MasterMessage]() =
    Behaviors.withTimer[MasterMessage] { timerScheduler =>

      timerScheduler.startTimerWithFixedDelay(
        RepeatMasterMessageTimerKey,
        RepeatMasterMessage,
        Duration(1, TimeUnit.SECONDS),
        Duration(5, TimeUnit.MINUTES)
      )

      Behaviours.setup[MasterMessage] { context => 
        // master behaviour
      }
    }
}

相关问题