簡體   English   中英

獲取現有的或創建新的Akka演員

[英]Get existing or create new akka actor

我正在嘗試使用ActorFor獲取現有的ActorRef,或者如果不存在則創建一個新的。 我有以下代碼,但它似乎沒有按預期工作。 .isTerminated()始終為true。

ActorSystem system = ActorSystem.create("System");

            ActorRef subscriberCandidate = system.actorFor("akka://System/user/"+name);

            if (subscriberCandidate.isTerminated())
            {
                ActorRef subscriber = system.actorOf(new Props(new UntypedActorFactory() {
                      public UntypedActor create() {
                        return new Sub(name,link);
                      }
                    }), name);
                System.out.println(subscriber.path().toString() + " created");
            }
            else
                System.out.println("already exists"); 

我在這里想念什么? 提前致謝。

“獲取或創建”只能由指定角色的父級執行,因為只有那個父級(如果不存在)可以創建角色,並且只有父級可以一致地創建(即沒有競爭條件)。 在演員中,您可以做

// assuming a String name like "fred" or "barney", i.e. without "/"
final Option<ActorRef> child = child(name);
if (child.isDefined())
  return child.get();
else
  return getContext().actorOf(..., name);

不要在頂層執行此操作(即使用system.actorOf ),因為那樣一來您就不能確定誰在請求創建時“勝出”,並且依賴用戶的監護人也不是一個好的監管策略。

將您的查找更改為:

system.actorFor("/user/" + name)

如果您正在查找的是本地參與者,則不需要“ akka:// System”部分。 假設該參與者已經在代碼中的其他地方啟動了。 如果沒有,那是行不通的。

根據給定的代碼,您正在調用actorFor來查找不存在的actor。 在調用actorOf之前,actor並不存在。

暫無
暫無

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

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