如何将经典的 ActorContext 转换为类型化的

How do I convert a classic ActorContext to a typed one

假设我定义了一些消息:

sealed trait Command
case class A(i: Int) extends Command
case class B(str: String) extends Command

然后像下面这样的经典演员来处理这些消息。创建时我需要访问 ActorContext 但作为类型化上下文不是经典

class MyActor extends Actor {

  val typedContext: ActorContext[Command] = ???

  def receive = {
    case A(i) =>
      // Do something with i
    case B(str)
     // Do something with str

  }
}

我知道我可以执行 self.toTyped[Command] 来获取键入的自我引用。但是我找不到与 ActorContext 类似的东西。我将如何进行转换?

没有从经典 ActorContext 到类型化 ActorContext 的转换。关于类型 ActorContext 可以做而经典 ActorContext 不能做的唯一事情是:

  • 询问另一个演员并调整结果(要在经典中做到这一点,您可以使用经典的询问模式:import akka.pattern.ask
  • 将未来传递给演员(为此import akka.pattern.pipe
  • 利用类型化 actor 的生命周期(生成、监视、取消监视、停止)

对于最后一个,你可以

import akka.actor.typed.scaladsl.adapter.ClassicActorContextOps

这将添加

  • spawn/spawnAnonymous
  • watch
  • unwatch
  • stop

处理类型化的方法。