我的基础设施中有N个节点(即不同的JRE)运行Akka(尚未集群)
节点没有特定的"角色",但它们只是数据处理器。 "处理器"这些数据将是Actors。各种非Akka / Actor(其他java代码)(调用者)可以通过创建要处理的数据来调用特定类型的处理器。最终他们需要回到结果。
A"处理器" Actor非常简单并且支持类似" process(data)"这样的方法,它们是无状态的,它们会变异并将数据发送到外部系统。这些处理器的执行时间可能不同,因此它们非常适合在Actor中包装。
这些"处理器有很多种不同的类型。并且每个唯一的配置存储在数据库中。我的系统中的每个节点在启动时都需要创建一个路由器Actor,它面向每个这些独特处理器Actor类型的N个实例。我无法在代码或akka配置中静态定义/命名/创建这些Actors。
重要的是要注意,任何Actor处理器的配置都可以随时在数据库中更改,并且这些Actors的路由器创建者需要定期终止并根据新配置动态重新创建它们。 / p>
关键点在于其中一些"处理器"在我的所有节点上只能有一个非常有限的Actor实例#。 I.E processorType-A可以具有无限数量的实例,而processorType-B只能在整个集群中运行2个实例。因此,想要调用processorType-B的NODE1上的调用者需要将其消息路由到NODE2,因为该节点是运行processorType-B actor实例的唯一节点。
考虑到上下文,我的问题是我正在寻找一些设计帮助:
对于上述第1,2,3,4点,我对
对于第5点和第6点,但我不知道如何使用Akka群集正确实现这一点,因为我的节点"彼此不了解并且它们各自运行相同的代码,以根据该数据库配置动态创建这些路由器角色。
想到的问题是:
如何正确处理"名称"群集中的这些路由器Actors? I.E for" processorType-A",可以有无限数量的Actor实例。每个节点都会在本地使这些实例可用,但如果它们都在一个节点上终止,我仍然希望消息为他们的"处理器类型"被路由到另一个仍然具有可用实例的节点。
我如何处理强制执行/协调处理器"整个集群的实例限制(即" processorType-B"全局只能有2个实例)等。而processorType-A可以有更高的数字。它的节点需要有一些方法来检查谁在群集中创建了这些实例?我不确定Akka是否有能力自行完成这项工作?
ClusterRouterPool?用ClusterRouterPoolSettings?
非常感谢任何想法和/或设计提示/想法!感谢