首页 > 解决方案 > 为 Akka 演员定义接收方法

问题描述

来自Akka 文档

Actor 是通过扩展Actor基本特征并实现receive方法来实现的。该receive方法应该定义一系列 case 语句(类型为PartialFunction[Any, Unit]),使用标准 Scala 模式匹配定义您的 Actor 可以处理的消息,以及应该如何处理消息的实现。

代码:

class MyActor extends Actor {
  val log = Logging(context.system, this)

  def receive = {
    case "test" ⇒ log.info("received test")
    case _      ⇒ log.info("received unknown message")
  }
}

没有要接收的输入,那么在 case 语句中匹配的是什么?还有,PartialFunction[Any, Unit]这里是怎么出现的?

标签: akkaactor

解决方案


Actor 是消息驱动的,并且input像发送到邮箱的消息一样被馈送到 Actor 。消息最常通过即发即弃(即)发送给参与者,例如:tell!

myActor ! "test"

Actor 中的receive方法允许对消息进行模式匹配(通常按类型)以相应地处理它们。该方法具有以下类型PartialFunction[Any, Unit]

  1. case模式匹配是一个偏函数,非常适合作为筛选工具来有效处理各种类型的传入消息

  2. 它可以接收任何类型的消息,以任何必要的方式处理它们,并且不需要返回任何东西,例如:

    case i: Int => // do something with i
    case s: String => // do something with s
    // ...
    

请注意,在未处理的消息的情况下,在幕后anUnhandledMessage()将被发布到 ActorSystem。


推荐阅读