0

假设我定义了一些消息:

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 类似的东西。我将如何进行转换?

4

1 回答 1

2

没有从经典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

处理类型的方法。

于 2020-12-16T21:50:43.830 回答