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

群集中碎片迁移过程中的Akka参与者内部状态

张星洲
2023-03-14

我们正在使用Akka sharding将我们的运行参与者分布在多个节点上。这些行为体是持久的,我们将它们的内部状态保留在数据库中。

现在我们需要将ActorRef添加到“Metrics Actor”中,在每个节点上运行。shard中的每个actor都应该将遥测数据发送给metrics actor-它必须选择正确的metrics actor,该actor在本地运行于同一节点上。原因是,度量执行元收集数据对等节点。

    ClusterSharding(system).start(
        typeName = shardName,
        entityProps = MyShardActor.props(mvMetrics),
        settings = ClusterShardingSettings(system),
        extractEntityId = idExtractor,
        extractShardId = shardResolver)

我的问题是,如果这样创建的参与者在节点之间迁移,例如从节点A->B,会发生什么?我可以想象,节点B上迁移的props对象与节点A上的对象保持相同,因此ActorRef保持相同,因此新创建的actor将向原始节点A发送度量数据?

谢谢

共有1个答案

徐嘉勋
2023-03-14

如何利用ActorRef.Path?假设每个节点都有以某种方式命名的actor,然后一个actor将使用路径动态地找到相关的metrics actor。

 类似资料:
  • 我的用例是,我想建立一个运行Akka Actors的节点集群。每个参与者都是同一参与者的实例,用于处理与特定用户的WebSocket连接。每个参与者都将使用唯一的路径注册自己。在非集群设置中,我可以简单地通过其路径调用actor,如其中,是actor实例的唯一名称。我必须将消息传递给这些参与者,这样他们才能将消息发送回各自的WebSocket客户端。 显然Akka集群提供了各种设置:http://

  • 我遇到了一个场景,我需要检查特定的参与者是否存在,这可以通过ActorSystem完成。actorSelection方法,指定参与者路径 但是,当本地节点上存在此类参与者时,此方法可以正常工作。若actor系统由多个节点组成,并且actor存在于另一个节点上,则该方法告诉我们actor不存在。若我给出指定远程参与者系统的字符串,那个么这个方法可以工作。但在actorSelection方法中指定远程

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

  • 本文向大家介绍内部碎片与外部碎片之间的区别,包括了内部碎片与外部碎片之间的区别的使用技巧和注意事项,需要的朋友参考一下 在从内存中加载和删除进程时,可用内存空间会分成几小块。考虑到有时由于无法将进程分配给存储块而导致其无法使用,因此有时无法将其分配给存储块。此问题称为碎片。 内部碎片 分配给进程的内存块更大。内存的某些部分未使用,因为它不能被其他进程使用。通过有效分配最小的分区但足够大的分区,可以

  • 我有一个akka集群项目: https://github.com/roclas/akka-distributed-hash 它基本上是跨集群节点的分布式HashMap。 我希望能够读取(使用tcpdump或wireshark或类似工具)不同虚拟机中参与者之间交换的消息。 我怎么能这么做? 执行TCP转储时,我只看到“集群消息”,但看不到不同虚拟机中不同参与者交换的消息。 如果我在端口2551上启动

  • 我有一个带有类型化参与者的集群分片应用程序。演员看起来像这样: 演员是通过这样的碎片信封创造的: 两个for循环向同一参与者发送消息。第一个循环发送整数,第二个循环发送字符串。当参与者处理消息时,它会Hibernate,以便在队列中建立消息并测试优先级。优先级邮箱在系统配置中配置,UnboundDPriorityMailbox实现如下: 为什么Actor按照消息到达的顺序打印消息,而不考虑优先级生