16.3.2 Actor 的创建

访问 Actor 的方法和访问普通对象的方法有所不同。

我们从来都不会得到 Actor 的实例,从不调用 Actor 的方法,也不直接改变 Actor 的状态,反之,只向 Actor 发送消息。

除此之外,我们也不会直接访问 Actor 的成员,而是通过消息传递来请求获取关于 Actor 状态的信息。

使用消息传递代替直接方法调用可以加强封装性。

通过使用基于消息的方法,我们可以相当完整地将 Actor 的实例封装起来。

如果只通过消息进行相互通信的话,那么永远都不会需要获取 Actor 的实例。我们只需要一种机制来支持向 Actor 发送消息并接收响应。

在 Akka 中,这个指向 Actor 实例的引用叫做 ActorRefActorRef 是一个无类型的引用,将其指向的 Actor 封装起来,提供了更高层的抽象,并且给用户提供了一种与 Actor 进行通信的机制。

Actor 系统就是包含所有 Actor 的地方。

有一点可能相当明显:我们也正是在 Actor 系统中创建新的 Actor 并获取指向 Actor 的引用。actorOf 方法会生成一个新的 Actor,并返回指向该 Actor 的引用。

val actor: ActorRef = actorSystem.actorOf(Props(classOf[HelloActor]))

Actor 都被封装起来了,不能够被直接访问。我们不能从外部代码中直接访问 Actor 的状态。


Props

为了保证能够将 Actor 的实例封装起来,不让其被外部直接访问,我们将所有构造函数的参数传给一个 Props 的实例。

Props 允许我们传入 Actor 的类型以及一个变长的参数列表。

Props(classOf[HelloActor], arg1, arg2, argn)
Copyright © 尚硅谷大数据 2019 all right reserved,powered by Gitbook
该文件最后修订时间: 2019-04-12 09:01:17

results matching ""

    No results matching ""