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