当前位置: 首页 > 知识库问答 >
问题:

检查akka集群中是否存在参与者

吕昀
2023-03-14

我遇到了一个场景,我需要检查特定的参与者是否存在,这可以通过ActorSystem完成。actorSelection方法,指定参与者路径

但是,当本地节点上存在此类参与者时,此方法可以正常工作。若actor系统由多个节点组成,并且actor存在于另一个节点上,则该方法告诉我们actor不存在。若我给出指定远程参与者系统的字符串,那个么这个方法可以工作。但在actorSelection方法中指定远程actor系统字符串似乎不是一个好主意,因为集群中的节点可以加入和离开

def getOrCreate(customerId: String, deviceId: String): Future[ActorRef] = {
    context.system.actorSelection(s"/user/${customerId}{$deviceId}") ? Identify(deviceId) map {
    case ActorIdentity(`deviceId`, None) =>
      // create new actor
    case ActorIdentity(`deviceId`, Some(actor)) =>
      actor
  }
}

当actor存在于本地节点上时,上述代码工作正常,为了检查actor是否存在于集群中的其他节点上,我必须执行以下操作:

def getOrCreate(customerId: String, deviceId: String): Future[ActorRef] = {
    context.system.actorSelection(s"akka.tcp://Relay@node1:3503/user/${customerId}{$deviceId}") ? Identify(deviceId) map {
    case ActorIdentity(`deviceId`, None) =>
      // create new actor
    case ActorIdentity(`deviceId`, Some(actor)) =>
      actor
  }
}



有没有更好的方法来检查actor是否存在于整个akka集群中,而不仅仅是本地节点?

共有1个答案

那昊
2023-03-14

看起来只有当集群中不存在具有相同标识符的参与者时,才需要创建参与者实例。为此,我认为最好的方法是使用Akka集群切分,让Akka负责创建和分发实例。这还将负责将任何消息路由到参与者的正确节点,并在集群大小发生变化时重新分配参与者等。

 类似资料:
  • 问题内容: 我有一个不是actor的java对象,它使用actorSelection(Path)从一个actor系统中选择actor。系统中可能不存在所选参与者。 在Java Api中,ActorSelection不存在ask(),因此我无法向actor选择发送和标识消息并使用响应的发送者。 我试图通过演员选择将消息发送给演员,然后对死信做出反应来解决该问题。但是我没有任何死信。 如何通过Acto

  • 我使用的是带有Scala 2.12的Databricks群集版本7.3 LTS。这个版本确实使用Log4J。 官方文件说它使用Log4J版本。这是否意味着我没有这个漏洞?如果我这样做了,我可以在集群上手动修补它,还是需要将集群升级到下一个LTS版本?

  • 本文向大家介绍JavaScript 检查集合中是否存在值,包括了JavaScript 检查集合中是否存在值的使用技巧和注意事项,需要的朋友参考一下 示例 要检查集合中是否存在给定值,请使用方法:.has() true如果someVal出现在集合中,将返回,false否则返回。

  • 我有一个演员系统,如下图所示。 主演员启动监控演员和监控演员。 Monitor actor会发出一条消息,告诉自己每30秒检查一次设备资源清册。对于资源清册中存在的每个设备,它会向Supervisor actor发送一条消息以注册该设备。 主管参与者在收到来自监视器参与者的消息以注册设备时启动设备参与者。 代码可以在github上找到。 在单个JVM实例中,一切都运行得很好,但当涉及到集群模式时,

  • 我希望能够从集群的一个Akka节点创建一个actor,这样actor就可以生存,而不管创建它的节点是否正在运行。 这是我试图处理的场景: 节点A启动。 节点B启动。 节点A和B形成群集。 节点A创建FooActor。 节点A终止。 节点B仍然能够搜索并找到节点A创建的FooActor 节点B会杀死fooactor。 此时,当节点A终止时,它创建的参与者将丢失。 你能告诉我这是否可能使一个参与者比创