如何在Akka集群中动态创建执行元

siotufzp  于 2022-11-05  发布在  其他
关注(0)|答案(1)|浏览(119)

如何在集群分片中动态创建一个参与者,并通过集群客户端从集群外部传递消息。

0x6upsns

0x6upsns1#

因此,您不必提供很多有关使用什么的细节(类型化与非类型化、JVM或.NET)。但是,无论如何,简短的答案就是“向ShardRegion发送消息“。分片的全部要点是,每当收到消息时,都会自动透明地动态创建参与者。
例如,如果您有一个客户参与者,并且您发送了“获取帐户1001的帐户余额,”则ShardRegion将自动从消息中提取客户编号,并计算出该参与者属于哪个分片,并将消息路由到拥有该碎片的节点。(如果它还不存在),然后将消息转发给参与者。
所以,更短的答案是“它只是根据需要自动发生”。但听起来你可能想通读所有的分片文档,这样你就能理解发生了什么。

  • 编辑(回应注解):*

我试图回复下面的评论。但是它太长了,无法在评论中回复,所以我添加了这一部分。
当我们传递一些消息时,我们可以通过用户定义的参与者来产生参与者吗?但是它可以在其他节点上分布完成吗?意味着如果我在5个节点中创建10个参与者,它会在每个节点中创建2个参与者吗?在分片中,它可以通过分片每个参与者来完成
回答这个问题的部分挑战是,你所说的“创造一个演员”的意思有些模糊。
从根本上说,创建参与者的唯一直接方式是参与者生成子参与者。存在与参与者系统相关联的根级别参与者。它可以生成子参与者。然后子参与者可以生成子参与者,依此类推。根据定义,所有这些子参与者和子参与者都在同一节点上。因此,在这种“直接”解释中,所有的演员创作都是本地的。2不管怎样。3句号。
此外,您还特别提到了集群客户端。这意味着您是客户端而不是参与者。这意味着,从最严格的意义上讲,您根本不能创建参与者。无论是远程还是本地,如果您是集群客户端,您根本不能创建参与者。只有参与者才能创建参与者。
但是,实际上,这是不正确的。因为一个非常常见的情况是,参与者将允许您间接地产生参与者来响应消息。这就是集群分片的作用:它本质上在每个节点上运行一个“代理”,根据需要自动产生参与者。2代理甚至会在不同的节点上停止和重新启动参与者,以根据需要“重新平衡”。
这又回到了我最初的观点,集群分片的方式并没有什么神奇之处。你可以在每个节点上运行你自己的代理。要么直接,要么通过基于集群的路由器,要么通过事件总线,或者其他任何一种机制。
那么,回到你的具体问题:
如果我在5个节点中创建10个参与者,是否会在每个节点中创建2个参与者?*
从某种程度上说,这个问题并没有什么意义,正如上面提到的,作为一个集群客户机,您实际上根本无法创建参与者。
但是一旦你开始谈论间接创造,它基本上是你想要的任何东西,它只是取决于你怎么写它。
在Akka Sharding中,也就是你最初的问题,参与者将在其哈希值指定的任何节点上创建。这希望是相当一致的,但可能不是完全均匀的。但分片API没有“创建参与者”API,它只是根据需要创建参与者。
另一方面,如果您使用某种支持群集的路由器来产生参与者,则功能可以是您想要的任何功能。
但我觉得这个问题太模糊了,无法有意义地回答。

相关问题