【问题标题】:Akka session actors in multiple nodes多个节点中的 Akka 会话参与者
【发布时间】:2014-12-09 04:56:00
【问题描述】:

此刻,我只在一个节点上运行了这个actor会话管理实现:

1) 我有一个处理所有会话的 SessionManager 演员

2) SessionManagerActor 收到两条消息:CreateSesion(id)ValidateSesion(id)

3) 当SessionManagerActor 收到CreateSesion(id) 消息时,它会使用actorFor 方法创建一个SessionActor,如下所示:

context.actorOf(Props(new SesionActor(expirationTime)), id)

4) 当SessionManagerActor 收到ValidateSesion(id) 消息时,它会查找现有的SessionActor 并使用resolveOne 方法评估是否存在,如下所示:

context.actorSelection("akka://system/user/sessionManager/" + id).resolveOne()


这种逻辑效果很好,但我需要在多个节点(集群)中实现相同的行为

我的问题是,建议使用哪种方法来实现该会话管理行为,以便它在一个或多个节点中工作?

我已阅读 akka 文档,它提供了 akka-remoteakka-clusterakka-cluster-shardingakka-cluster-singletonakka-distributed-publish-subscribe-cluster 但我不确定哪一个是合适且最简单的方法. (请注意,SessionActor 是无状态的,我需要将它们定位在集群中的任何位置。)

【问题讨论】:

    标签: akka session-management akka-cluster


    【解决方案1】:

    由于您有一个协议,您可以在其中验证会话是否已经存在,并且在该会话上有一个生存时间,这在技术上并不是完全无状态的。例如,您可能不希望丢失现有会话并任意重新启动它们,并且您可能不希望为每个 id 创建多个会话。

    因此,我将研究cluster sharding 机制,可能结合akka-persistence 来保持会话的到期状态。

    这将为您提供一个容错设置,并在节点关闭或新节点出现时进行重新平衡。

    激活器模板akka cluster sharding scala 可能对示例代码有帮助。

    【讨论】:

      猜你喜欢
      • 2021-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-10
      • 1970-01-01
      • 2015-12-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多