【发布时间】:2015-09-08 04:17:07
【问题描述】:
我的演员 A1 可以在集群中的任何种子节点中启动。
在某些情况下,其他actor A2(可能来自另一个节点)需要获取A1 的ActorRef。执行此操作的最佳方法是什么?
1) 我想避免硬编码种子节点网络地址。
2) 我可以运行订阅了集群事件的演员,但我不知道如何强制他在开始之前查看集群中的节点。
3) 我可以尝试通过循环 ActorSelection 来查找演员,但我仍然无法从我的 akka.Cluster 中获取种子节点列表。我找到的最接近的方法是:Cluster cluster = Cluster.get(context().system());
SortedSet<Member>members = cluster.state().members();
Traversable<Member> filteredmembers = members.filter(_.status == MemberStatus.up());
但这是 Scala 语法和类,我有例外:
'_' used as an identifier (use of '_' as an identifier might not be supported in releases after Java SE 8)
如何避免这个异常?
【问题讨论】:
-
如果您的问题是 _,请为 Java8 构建或将 filter() 更改为 filter(x->x.status==...)
-
如果您只想让 A1 的单个实例存在于集群中并且集群的所有成员都可以访问它,您可能需要查看 Cluster Singletons (doc.akka.io/docs/akka/2.3.9/contrib/cluster-singleton.html)
标签: java scala akka akka-cluster