如何计算在akka系统中特定时间活动的某种类型的演员?

时间:2013-06-19 22:58:37

标签: java scala akka

Akka 2是否提供了一种方法来确定系统中特定时间活动的某种类型的演员数量?

我一直在寻找像

这样的东西
int actorCount = getContext().count(MyActor.class)

OR

Props props = Props.create(MyActor.class, "actorName")
...
int actorCount = getContext().count(props)

OR

getContext().actorSelection("/path/to/actor").count()

我刚刚开始使用Java中的akka​​框架,所以请耐心等待。

2 个答案:

答案 0 :(得分:0)

在我的一个Akka应用程序中(我的第一个,而不是一个我认为是如何编写此类系统的光辉榜样),我实施了一个由心跳驱动的低水/高水位工作生成策略。低水位和高水位标记是根据活跃的工作人员数量来定义的,每个工作人员都做一件事并由经理创建。该经理跟踪已启动和尚未完成的工作人员,并可响应工作生成器对当前活动计数的请求。对这些调查的回应提供了有关正在进行的工作是否已经低于低水位线并且应该产生新工作的信息。

这是一种原始的,在我正在研究的新系统中,工作生成和工作执行之间的联系以及检查点记录是以更连续,更少“批量导向”的方式完成的。这个系统即将部署,所以目前我无法确定它将如何执行,但我很确定它会表现出比早期系统更好的行为。早期的系统在如何生成,执行和记录它所做的工作方面本质上也更为复杂。

答案 1 :(得分:0)

[将此作为有效答案]

如果需要计数的演员不是父级和/或无法检索目标演员的ActorRef,那么以下可能是替代方案。

计算某种类型的演员数量可以通过发送“人数统计”消息,持有ActorRef数组,传递每个演员来完成。然后每个目标actor都可以将它的ActorRef添加到该列表并转发消息。但这取决于系统的性质,并且只有在您毫无疑问地知道在“人数统计”期间没有任何演员产生时才有效。