Java 在akka系统中,如何计算在特定时间活跃的特定类型的参与者?

Java 在akka系统中,如何计算在特定时间活跃的特定类型的参与者?,java,scala,akka,Java,Scala,Akka,Akka 2是否提供了一种方法来确定系统中某一时间处于活动状态的特定类型的参与者的数量 我一直在找类似的东西 int actorCount = getContext().count(MyActor.class) 或 或 我刚刚开始使用Java中的akka框架,所以请耐心听我说。在我的一个akka应用程序中,我的第一个应用程序,而不是一个我认为是如何编写此类系统的光辉例子,我实现了一个由心跳驱动的低水位/高水位工作生成策略。低水位线和高水位线是根据活跃的工作参与者的数量来定义的,每个参与者都做一

Akka 2是否提供了一种方法来确定系统中某一时间处于活动状态的特定类型的参与者的数量

我一直在找类似的东西

int actorCount = getContext().count(MyActor.class)


我刚刚开始使用Java中的akka框架,所以请耐心听我说。

在我的一个akka应用程序中,我的第一个应用程序,而不是一个我认为是如何编写此类系统的光辉例子,我实现了一个由心跳驱动的低水位/高水位工作生成策略。低水位线和高水位线是根据活跃的工作参与者的数量来定义的,每个参与者都做一件事,并且由经理创建。该经理跟踪已启动和尚未完成的工作人员,并可以响应工作生成器对当前活动计数的请求。对这些询问的答复提供了正在进行的工作是否低于低水位线以及是否应开展新工作的信息


这有点粗糙,在我现在正在研究的一个新系统中,工作生成和工作执行之间的连接,以及检查点日志记录,是以一种更连续、更少面向批处理的方式完成的。这个系统即将部署,所以目前我不能确定它将如何运行,但我非常确定它将比以前的系统表现出更好的性能。在如何生成、执行和记录所做的工作方面,早期的系统本质上也更为复杂。

[这也是一个有效的答案]

如果需要计数的参与者不是父级和/或无法检索目标参与者的ActorRefs,则以下可能是替代方法


通过发送人头计数消息、持有ActorRef数组并传递每个参与者,可以计算特定类型的参与者的数量。然后,每个目标参与者都可以将其ActorRef添加到该列表并转发消息。但这取决于系统的性质,只有当您毫无疑问地知道在人头计数过程中没有任何参与者产生时,这才有效。

处理或等待messageCounting意味着能够停止世界,然后遍历多个潜在节点上的整个参与者树,然后检查其类型和类型回来报到。你能告诉我你想解决什么问题吗?我想在没有特定类型的工作参与者的情况下关闭系统。为什么不直接挂接生命周期方法preStart、preRestart、,在这些参与者上进行postStop,并让它将事件馈送到事件总线,另一个参与者可以监听并保持计数,然后在计数下降到0时关闭系统。这很简单,创建一个参与者,该参与者将是特定类型的所有工作人员的父级,让它对所有的孩子使用死亡观察,然后它可以检查是否没有孩子留下,然后退出。
Props props = Props.create(MyActor.class, "actorName")
...
int actorCount = getContext().count(props)
getContext().actorSelection("/path/to/actor").count()