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被标记为失败。