setReceiveTimeout 如何在池化 actor 上下文中工作?

How does setReceiveTimeout work in pooled actor context?

我正在研究一些涉及关闭空闲参与者的逻辑。然而,这些演员是池中的演员,这意味着 ReceiveTimeout 消息被发送到池中的所有演员。

我 运行 遇到的问题是,如果池中有 5 个参与者,当池收到一条消息时,只有其中一个的超时重置。剩下的 4 个,因为他们没有收到消息,所以仍然在原来的 TimeOut 时钟上,这根据框架是有意义的。但是对于我的用例,我希望这样,如果池中的其中一个参与者收到一条消息,则为所有参与者重置超时。我怎样才能做到这一点?我想到的一种粗略的方法是,一旦池中的一个演员收到消息,它就会向池中的其他演员发送心跳。但不确定如何在 Akka 中实现这一点。

我的actor是这样启动的-

Props.create(ActorA.class, () -> new ActorA()).withRouter(new SmallestMailboxPool(poolSize));

我假设您指的是具有池特征的路由器?假设,查看文档 specially handled messages 处理部分下的广播消息。

在路由器上设置 receiveTimeout,然后向处理程序中的 worker 发送广播消息以处理路由器中的超时。