Akka Typed中的Actor可以处理多个消息类型。我们可以使用Akka Typed的泛型ActorRef来定义Actor的接收消息类型。以下是一个示例代码,其中Actor可以接收两种不同类型的消息:
import akka.actor.typed.ActorRef
import akka.actor.typed.Behavior
import akka.actor.typed.scaladsl.Behaviors
object MyActor {
sealed trait Command
case class FirstMessage(msg: String) extends Command
case class SecondMessage(num: Int) extends Command
def apply(): Behavior[Command] = Behaviors.receive { (context, message) =>
message match {
case FirstMessage(msg) =>
context.log.info(s"Received FirstMessage: $msg")
Behaviors.same
case SecondMessage(num) =>
context.log.info(s"Received SecondMessage: $num")
Behaviors.same
}
}
}
object Main {
def main(args: Array[String]): Unit = {
val myActor: ActorRef[MyActor.Command] = actorSystem.spawn(MyActor(), "myActor")
myActor ! MyActor.FirstMessage("Hello world!")
myActor ! MyActor.SecondMessage(42)
}
}
在上面的示例中,MyActor定义了两个不同种类的Command,即FirstMessage和SecondMessage。通过在ActorRef类型参数中使用Command,我们确保了Actor只会接受Command类型的消息。在Actor的Behaviors中,我们可以使用模式匹配处理不同类型的消息。