scala - 如何添加重复计划以发送到 masterRegistryActor
问题描述
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 typed,我想了解如何执行以下操作:
如何在重复的时间范围内安排,目前我只能这样做:
system.scheduler.scheduleOnce(50 毫秒, masterRegistryActor, Master.WatchList("AAPLE"))
我在 Behaviors.Setup 中执行此操作,由于某种原因 system.scheduler.schedule(...) API 不可用,为什么以及如何解决这个问题?
- 我的另一个困惑是,由于我的 masterRegistryActor 在我的 rootBehavior 中,我如何从外部引用它?我想让这个actor在我的整个应用程序中都可用,有点像根/全局actor,但这是我找到生成它的唯一方法。
解决方案
让我们假设它Master
实际上是 aBehavior[MasterMessage]
并且定义如下
trait MasterMessage
case object RepeatMasterMessage extends MasterMessage
object Master {
def apply[MasterMessage]() =
Behaviors.setup { context =>
// master behaviour
}
}
然后,您可以将Master
行为包装到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
}
}
}
推荐阅读
- python - Python:如何尽可能快地发送更多请求?
- deployment - 如何在 Uffizzi 上设置我的 API 服务?
- angular - 角度设置页面加载微调器总是加载
- javascript - How to get count of active markers on mapbox map
- html - 设计剥离式按钮
- compression - 使用不同版本的 snappy-java 库进行压缩和解压缩
- python - Python:max(作为字符的数字列表)给出正确和错误的答案
- c# - 为什么我的课程可以在程序类中访问而无需提及访问修饰符?
- google-chrome - 如何在 heroku free dyno 中以非无头模式运行 chrome
- css - 我应该参考哪个单位的宽度以及我应该使用什么单位进行响应式设计?(非自适应设计)