gpt4 book ai didi

java - 如何向空闲的 akka actor 发送消息?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:01:59 24 4
gpt4 key购买 nike

我有一个名为 TaskRunner 的 Actor 。这些任务最多可能需要 1 分钟才能运行。由于我使用的库,每个 jvm/节点只能有一个参与者。我在各种机器上有 1000 个这样的节点。

我想使用各种规则将任务分配给这些节点,但最重要的是:

  • 永远不要在 TaskRunner 节点的邮箱中排队任务,总是等到 TaskRunner 空闲后再向其发送任务

我想这样做的方法是让另一个节点上的参与者(我们称其为 Scheduler 参与者)监听来自 TaskRunner 节点的注册并保持已发送到何处的内部状态。

如果我这样做,我大概只能有一个这个 Scheduler actor 的实例,因为如果有多个 TaskRunner 节点,它们将不知道当前哪些 TaskRunner 节点正忙,因此我们会在队列中获取任务。

这是否意味着我应该为 Scheduler actor 使用 Cluster Singleton?

有没有更好的方法来实现我的目标?

最佳答案

我会说你需要:

  • 从空闲 actor 池中向 actor 发送任务的调度员 actor(集群单例)

  • 您的TaskRunner actor 应该有两种状态:运行和空闲。在空闲状态下,它应该定期将自己注册到调度程序 actor(通知它处于空闲状态)。通常,由于节点关闭时调度程序可能会丢失状态并将单例移动到另一个节点。

  • 调度程序本身会保留空闲 actor 的列表。当需要完成新任务并且列表不为空时,从列表中取出工作人员并发送任务(工作人员可以立即从列表中删除,但可以安全地使用 Ack 以确保任务被处理,或者重新- 如果 Ack 超时,则发送给另一个工作人员)

关于java - 如何向空闲的 akka actor 发送消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48925819/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com