簡體   English   中英

在Akka集群中的Actor查找

[英]Actor lookup in an Akka Cluster

我有一個Scala應用程序,我有幾個節點。 每個節點都有一個帶有主actor的ActorSystem,每個actor必須有一些ActorRef給某些actor(例如“Node 1”有“Actor3”,“Actor3”需要ActorRef為“Actor7”和“Actor8”才能完成它的工作) 。 我的問題是我不知道另一個節點(“Node2”)是否有我正在尋找的“Actor1”或“Actor7”。

我的想法是在每個MemberUp中循環,使用ActorSelection幾次並詢問每個新成員是否有我正在尋找的actor。 這是我能做到的唯一方法嗎? 有沒有辦法更有效地做到這一點?

ActorSelection的另一種方法可以是查找表。 如果你需要做很多演員選擇而且演員創作不是那么動態,那么它可以是更好的解決方案。

在每個節點上,您可以創建一個數據結構,如Map[String,List[String]]第一個鍵是節點名稱,List值是此節點中的actor refs。

特技是當任何節點為其actor(創建,停止)更改時,另一個actor應該注意到其他節點有關更改,因此任何節點都已同步更新的地圖。

如果你保證它,那么每個節點都可以查找actor的存在;

map.get(nodeName) match {
  case Some(n) => n.contains(actorName)
  case None => false
}

通過在每個節點上的已知路徑上安裝DiscoveryActor ,我已經在我們的集群中解決了一個非常類似的問題。 DiscoveryActor的協議有

Register(name, actorRef)
Subscribe(name)
Up(name, actorRef)
Down(name, actorRef)

每個命名的 actor都向其本地DiscoveryActor發送一個Register ,后者又將Up向所有本地用戶和其他節點上的所有其他DiscoveryActor廣播,然后向其訂戶廣播

DiscoveryActor MemberUp / MemberDown以確定何時查找新的對等DiscoveryActor並廣播其本地注冊或廣播Down以查看已關閉的對等方的注冊。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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