Akka成员(actor)在集群中查找

时间:2015-06-22 15:59:35

标签: java scala akka akka-cluster

我的情况是我的演员A1可以在集群中的任何种子节点中启动。 在某些情况下,其他actor A2(可能来自另一个节点)需要为A1获取ActorRef。执行此操作的最佳方法是什么? 1)我想避免硬编码种子节点的网络地址 2)我可以运行订阅群集事件的actor,但我不知道如何强迫他在启动之前看到群集中的节点。
3)我可以尝试通过循环ActorSelection来查找actor,但我仍然无法从我的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)

如何避免此异常?

2 个答案:

答案 0 :(得分:1)

尝试将单个下划线替换为双下划线,这应该可行。 也就是说,使用__而不是_

Cluster cluster = Cluster.get(context().system());
SortedSet<Member>members = cluster.state().members();
Traversable<Member> filteredmembers = members.filter(__.status == MemberStatus.up());

答案 1 :(得分:0)

好吧,我目前的实施是:

import akka.actor.UntypedActor;
import akka.cluster.Cluster;
import akka.cluster.Member;
import scala.collection.Iterator;
import scala.collection.immutable.SortedSet;

Cluster cluster = Cluster.get(myUntypedActor.context().system());
SortedSet<Member> members = cluster.state().members();
final Iterator<Member> iter = members.iterator();
// ..searching in every member for needed actor using iterator