我有一个akka应用程序,我将在许多机器上部署。我希望这些应用程序中的每一个都可以使用分布式发布/订阅事件总线功能与彼此进行通信。
但是,如果我将系统设置为群集,那么我担心一个应用程序的actor可能会在与其启动的节点不同的节点上创建。
一个actor只在它所属的应用程序启动的机器上创建,这一点非常重要。
基本上,我不想要演员的弹性或聚类,我只想要分布式的pub / sub。我可以看到这里提到的单身或角色等选项http://letitcrash.com/tagged/spotlight22,但我想知道推荐的方法是什么。
答案 0 :(得分:0)
Akka目前没有任何功能可以让你的演员移动:要么以编程方式部署到特定的机器,要么将部署放入配置文件中。否则,它将根据您的需要在本地创建。
(Akka可能有一天会获得自动演员树分区,但是甚至还没有指定。)
答案 1 :(得分:0)
我认为这不是使用弹性群集的最佳方式。但我们也考虑了同样的问题,并发现通过实体id的哈希(如数据库分片)在节点上传播actor是有用的。例如,在每个节点上,我们创建一个NodeRouterActor
代理消息到多个WorkerActor
。当我们向NodeRouterActor
发送消息时,它通过按键id % nodeCount
在哈希表中查找它来选择端点节点,然后结束点NodeRouterActor
代理消息到特定的WorkerActor
哪个控制实体。