Tag: akka cluster

在群集中发现阿卡演员

最近我一直试图围绕着阿卡和基于演员的系统的概念。 虽然现在我对Akka的基础知识已经有了很好的理解,但是在集群和远程angular色方面,我还是苦苦挣扎了一些。 我将尝试使用Play Framework 2.0附带的WebSocket聊天示例来说明问题:有一个演员拥有WebSockets,并保存当前连接的用户列表。 演员在技术上和逻辑上基本代表聊天室。 只要在一台服务器上运行一个聊天室,这种方式就完全正常了。 现在我试图理解,当我们谈论运行在服务器集群上的许多dynamic聊天室(可以随时打开/closures新的房间)时,这个例子将不得不被延长(单个节点被添加或删除根据目前的需求)。 在这样的情况下,用户A可以连接到服务器1,而用户B连接到服务器2.两者都可以在同一个聊天室中通话。 在每台服务器上,仍然会有一个actor(对于每个聊天室?),该actor保存WebSocket实例以接收和发布事件(消息)给正确的用户。 但从逻辑上讲,服务器1或服务器2上应该只有一个聊天室参与者,该主持人拥有当前连接的用户(或类似任务)的列表。 你将如何去实现这个目标,最好是在“纯粹的阿克卡”中,而不需要增加额外的消息系统,如ZeroMQ或RabbitMQ? 这是我到目前为止,请让我知道这是否有道理: 用户A连接到服务器1,并分配一个演员来保存他的WebSocket。 参与者检查(使用Router?EventBus?其他?)在任何连接的群集节点上是否存在活动聊天室的“聊天室演员”。 因为它不会要求创build一个新的聊天室演员,并会发送和接收这个演员未来的聊天消息。 用户B在服务器2上连接并且一个演员也被分配给他的WebSocket。 它还检查所请求的聊天室的演员是否存在并在服务器1上find它。 服务器1上的聊天室演员现在充当给定聊天室的中心,将消息发送给所有“连接”的聊天成员演员并分发传入的聊天室。 如果服务器2出现故障,聊天室的参与者将不得不重新创build/移动到服务器2,尽pipe这不是我现在主要关心的问题。 我最想知道如何dynamic发现演员如何传播各种基本上独立的机器可以使用Akka的工具集。 我一直在看阿卡的文档已经有相当长的一段时间了,所以也许我在这里忽略了这个问题。 如果是这样,请赐教:-)