在给定相对路径的情况下从群集中获取ActorRef的最佳方法是什么?

时间:2018-03-13 20:00:07

标签: akka akka-cluster

我有一个Akka应用程序,在群集中有几个节点。每个节点运行各种不同的Actors,即并非所有节点都相同 - 冗余有一些重复。

我尝试使用这样的代码来获取与另一个节点上的Actor通信的引用:

val myservice = context.actorSelection("akka.tcp://ClusterSystem@127.0.0.1:2552/user/myService")

这样可行,因为在该地址的节点上有一个名为myService的Actor。这感觉就像简单的Akka Remoting,而不是聚类,因为地址是点对点的。

我想问群集"嘿!任何人都在路径" / user / myService"?"中有一个ActorRef,并且返回一个或多个refs(取决于那里有多少冗余副本)。然后我可以使用该选择器进行通信。

2 个答案:

答案 0 :(得分:0)

考虑使用Cluster Sharding,这样就无需确定演员在集群中的确切位置:

  

当您需要在集群中的多个节点之间分配actor并希望能够使用其逻辑标识符与它们进行交互时,群集分片非常有用,但无需关心它们在群集中的物理位置,这可能也会发生变化随着时间的推移。

使用群集分片,您不需要知道演员的路径。相反,您与ShardRegion个actor进行交互,这些actor将消息委派给适当的节点。例如:

val stoutRegion: ActorRef = ClusterSharding(system).shardRegion("Stout")
stoutRegion ! GetPint("guinness")

答案 1 :(得分:0)

如果您不想切换到群集分片但使用当前的部署结构,则可以使用ClusterClient docs中所述的ClusterReceptionist。

但是,通过这种方式,您必须先向接待员注册演员,然后才能向客户发现。