簡體   English   中英

集群中的 Akka 成員(actor)查找

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM