Scala Akka如何在路由中创建Typed ActorContext



我是Scala Akka的新手。假设我正在生成一个Configuration儿童演员

object Configuration {

def apply(): Behavior[ConfigurationMessage] = Behaviors.setup(context => new Configuration(context))

} 

现在,我需要在我的HTTP路由器中使用相同的上下文ActorContext[ConfigurationMessage]来进行一些操作。

如何在中创建相同的ActorContext

ActorContext不能在与其关联的参与者之外使用,包括在HTTP路由器中。任何从actor泄漏的ActorContext(例如,通过将其作为消息发送(在设计上都会抛出异常,并且如果在其actor之外使用,则不会对大多数操作执行任何操作。

ActorContext上可能在相关参与者之外使用的唯一操作是:

  • context.ask和朋友可以很容易地在目标RecipientRef上用返回askFuture替换,消息发送发生在将来的foreach回调中
  • context.executionContext:可以很容易地使用system.executionContext(通常是相同的(或通过调度员查找
  • context.pipeToSelf可能最好在将来作为foreach回调中的发送来完成
  • context.scheduleOnce最好直接使用系统调度器
  • context.self有点毫无意义,因为你必须已经有了ActorRef才能泄露ActorContext
  • context.system同样毫无意义,因为您已经拥有了该系统

最新更新