在这一刻,我有这个演员会话管理实现只在一个节点上运行:
1)我有一个SessionManager
处理所有会话的演员
2)SessionManagerActor
接收两条消息:CreateSesion(id)
和ValidateSesion(id)
3)当SessionManagerActor
接收到CreateSesion(id)
消息时,它会创建一个SessionActor
usingactorFor
方法,如下所示:
context.actorOf(Props(new SesionActor(expirationTime)), id)
4)当SessionManagerActor
接收到ValidateSesion(id)
消息时,它会查找现有消息SessionActor
并使用如下方法评估是否存在resolveOne
:
context.actorSelection("akka://system/user/sessionManager/" + id).resolveOne()
使用该逻辑效果很好,但我需要在多个节点(集群)中实现相同的行为
我的问题是,建议使用哪种方法来实现该会话管理行为,以便它在一个或多个节点中工作?
我已经阅读了 akka 文档,它提供了akka-remote
, akka-cluster
, akka-cluster-sharding
, akka-cluster-singleton
,akka-distributed-publish-subscribe-cluster
但我不确定哪一个是合适且最简单的方法。(请注意,SessionActor 是无状态的,我需要将它们定位在集群中的任何位置。)