簡體   English   中英

具有特定 ID 的模擬子演員 Akka Java

[英]Mock Child Actors Akka Java with Specific Ids

我正在使用Akka 2.5.23 我有一個父參與者forwards Register Message forwards給孩子,孩子用Initialized message回復original sender

我正面臨一些艱難的時間單元測試此代碼流。 我正在嘗試為父級外部化創建子級,但似乎無法弄清楚如何在創建child actor時傳遞定義child actor的名稱

下面是我的ParentActor

public class ParentActor extends AbstractLoggingActor {

    private final Function<ActorRefFactory, ActorRef> childMaker;

    public ParentActor() {
        this.childMaker = arg -> {
            return context().actorOf(ChildActor.props("ID", appContext), "ACTOR_NAME");
        };
    }

    private void handleRegisterMessage(RegisterMessage message){

        childMaker.apply(context());

        // what I generally do:
        // context().actorOf(ChildActor.props(message.getUniqueId(), "TransChild-" + message.getUniqueId());

    }
}

以下是我的ChildActor

public class ChildActor extends AbstractLoggingActor {

    private final String uniqueId;

    public ChildActor(String uniqueId){
        this.uniqueId = uniqueId;
    }

    public static Props props(String uniqueId) {
        return Props.create(ChildActor.class, uniqueId);
    }
}

誰能幫我這個?

他的 ID 是根據輸入消息生成的。 父級創建一個具有特定 id(源自消息)的子 Actor。 該唯一 ID 通過Props傳遞給孩子, PreStart()上的孩子根據通過道具傳遞的PreStart()執行操作

不完全確定我理解哪個部分是問題,但是,您可以:

將“childMaker” BiFunction<String, ActorRefFactory, ActorRef>並使用 `but 在測試中返回探測器或生成的測試特定角色在主要BiFunction<String, ActorRefFactory, ActorRef>創建命名子項。

所以代替f -> f.actorOf(Props.create(Child.class))你會做(name, f) -> f.actorOf(props, name)

老實說,我可能不會使用 lambda,而是在 Java 的 Actor 類中定義一個protected ActorRef spawnChild(RegisterMessage message)方法,並在測試中覆蓋它。 可能會更清楚,不知道為什么我們在文檔中有這樣一個例子。

您可以使用計數器並將其附加到您要賦予該演員的演員名稱的末尾。 喜歡,

public ParentActor() {
        int counter = 0;
        this.childMaker = arg -> {
            return context().actorOf(ChildActor.props("ID", appContext), "ACTOR_NAME" + counter++);
        };
    }

您不能創建多個同名演員。 有關創建演員的更多信息,您可以閱讀

暫無
暫無

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

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