不处理消息的 Akka (Typed) actor 行为是什么类型?

Leo*_*tis 1 scala akka akka-typed

假设我正在为 Akka(类型化)actor 定义一个行为,它将执行并发计算,将其结果报告给生成它的 actor,然后停止。

如果我使用计算的所有输入以及对其“父级”的引用来初始化此参与者,那么它将不需要接收任何类型的传入消息。

我将使用 创建此行为Behaviors.setup,向其传递一个执行计算的函数,然后返回Behaviors.stopped

Behavior[T]Akka(Typed)要求我为将返回此行为的函数提供一些结果类型。虽然我可以分配T行为将发送的结果消息的类型,但这似乎不正确。不是T要限制演员可以接收哪些消息吗?因此,如果我T根据参与者将发送的消息类型进行定义,我不是在向编译器“撒谎”吗?

事实上,此行为不能 - 也不会 - 处理任何传入消息。

是否有更正确的类型可以分配给此行为?

或者我是否在某种程度上错过了演员行为类型的要点?

例子:

在下面的代码中,我的applyreturns Behavior[ Result ],但这是一个谎言。它永远不会接收或处理Result消息。(它只会发送一封。)

import akka.actor.typed.{ ActorRef, Behavior }
import akka.actor.typed.scaladsl.Behaviors

object ConcurrentComputation {

  sealed trait Result
  final case class Success( result : Double ) extends Result
  final case class Failure( exception : Throwable ) extends Result

  def apply(
    argX : Double,
    argY : Double,
    parent : ActorRef[ Result ]
  ) : Behavior[ Result ] = Behaviors.setup(
    context => {
      try {
        Success( compute( argX, argY ) )
      }
      catch {
        case e : Throwable => Failure( e )
      }

      Behaviors.stopped
    } 
  )

  // Never mind what's actually being done.
  def compute( x : Double, y : Double ) : Double = ???
}

Run Code Online (Sandbox Code Playgroud)

Emi*_*l44 5

一般来说,它用于不\xc2\xb4t接收任何消息的行为的Behaviors.setup[Nothing] 。假设参与者会收到消息,但有时他们不会\xc2\xb4t。例如,当您在 Akka Typed 中创建 ActorSystem 时,您需要为用户监护 Actor 提供一个Behavior,该 Actor 不会接收任何消息,并且您为该 Actor 创建行为为Behaviour[Nothing]。

\n

该类型表示该actor无法接收任何消息,因为“不存在该类型的实例”(Nothing类型)。

\n