[英]Akka member(actor) lookup in cluster
我的情况是我的演员 A1 可以在集群中的任何种子节点中启动。 在某些情况下,其他角色 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)
如何避免这种异常?
看看这个: http : //doc.akka.io/docs/akka/2.4.0-RC2/java/distributed-pub-sub.html
有了这个,您可以仅通过参与者的路径在本地或远程向集群内的参与者发送消息。 当您有多个集群节点运行同一个 actor 时,它甚至会为您做一个简单的路由。
尝试将单下划线替换为双下划线,这应该可行。 也就是说,使用 __ 而不是 _
Cluster cluster = Cluster.get(context().system());
SortedSet<Member>members = cluster.state().members();
Traversable<Member> filteredmembers = members.filter(__.status == MemberStatus.up());
好吧,我目前的实现是:
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.