Actor 发现

    对于「非类型化的 Actor」,你将使用来查找 Actor。给定一个包含地址信息的 Actor 路径,你可以为任何 Actor 获取ActorRef。在 Akka 类型中不存在ActorSelection,那么如何获取 Actor 引用呢?你可以在消息中发送refs,但需要一些东西来引导交互。

    为此,有个 Actor 叫Receptionist。你注册了应该可以从本地Receptionist实例中的其他节点发现的特定 Actor。Receptionist的 API 也基于 Actor 消息。然后,Actor 引用的注册表将自动分发到集群中的所有其他节点。你可以使用注册时使用的键查找这些 Actor。对这样一个Find请求的答复是一个Listing,其中包含为键注册的一组 Actor 引用的Set。请注意,可以将多个 Actor 注册到同一个键。

    注册表是动态的。新的 Actor 可以在系统的生命周期中注册。当已注册的 Actor 停止或节点从群集中删除时,条目将被删除。为了方便这个动态方面,你还可以通过发送消息来订阅更改。当某个键的条目被更改时,它将向订阅服务器发送Listing消息。

    以下示例中使用了这些导入:

    首先,我们创建一个PingService Actor,并根据一个ServiceKeyReceptionist注册它,该ServiceKey稍后将用于查找引用:

    然后我们有另一个 Actor 需要构造PingService

    每次注册一个新的(本例中只有一次)时,守护者 Actor 都为每个当前已知的PingService生成一个PingerPinger发送一个Ping消息,当接收到Pong回复时,它将停止。

    Receptionist也在集群中工作,注册到Receptionist的 Actor 将出现在集群其他节点的Receptionist中。

    Receptionist的状态通过传播,这意味着每个节点最终都将达到每个的同一组 Actor。


    英文原文链接Actor discovery.