16.3.1 剖析一个 Actor

下面是一个简单的 Actor

class HelloAkka extends Actor {
    override def receive: Receive = {        
            case "Hello" => sender() ! "world"
            case _ => sender() ! Status.Failure(new Exception("unknown message"))     
    }
}
  • Actor: 要定义一个 Actor, 首先要继承 Actor 基类. 。Actor 基类是基本的 Scala Actor API,非常简单,并且符合 Scala 语言的特性。

  • Receive方法: 在 Actor 中重写基类的 receive 方法。并且返回一个 PartialFunction.

    • 需要注意的是receive方法返回的类型是 Receive类型
    • Receive表示一种定义的类型: type Receive = PartialFunction[Any, Unit]
    • 所以Receive是一个偏函数.
  • sender(): 通过调用该方法, 我们获取了发送者的ActorRef(发送者的 Actor 引用). 我们可以通过发送者的ActorRef给发送者发送消息, 对发送者做出相应.

  • !方法: 用于向发送方发送响应消息.

  • Status.Failure: 在收到未知的消息时, 返回一个Status.Failure. Actor 本身在任何情况下都不会自己返回 Failure(即使 Actor 本身出现错误)。因此如果想要将发生的错误通知消息发送者,那么我们必 须要主动发送一个 Failure 给对方。发送回 Failure 会导致请求方的 Future 被标记为失败。

Copyright © 尚硅谷大数据 2019 all right reserved,powered by Gitbook
该文件最后修订时间: 2019-04-13 09:48:19

results matching ""

    No results matching ""