簡體   English   中英

Akka:創造許多兒童演員而不是重復使用單個兒童演員

[英]Akka: Creating many child actors vs. reusing a single child actor

我對Akka很新,我有一個(希望)簡單的問題。 我有一個需要反復做一個小子任務的演員 - 也就是說,每次這個演員收到一條消息時,它都必須做N個子任務。 這個子任務是我為兒童演員指定的。 我的問題是,我應該為每個子任務創建一個子actor的新實例嗎? 或者我應該簡單地產生一個兒童演員,並發送N消息? 在這種情況下,最佳做法是什么?

為了更好地說明我的問題,這里有兩個愚蠢的例子(在Java中 - 但希望對Scala家伙來說足夠簡單!):

第一個actor類在構造時創建一個子actor,然后向該單個子actor發送許多消息。

public class ParentActor extends UntypedActor {

    private final ActorRef childActor;

    public ParentActor() {
        this.childActor = getContext().actorOf(Props.create(childActor.class));
    }

    @Override
    public void onReceive(Object msg) {
        for (int i=0; i<1000; i++) {
            this.childActor.tell("Some message", getSelf());
        }
    }
}

現在,將它與下面的actor進行比較,后者為每個需要發送的消息生成一個新的子actor。

public class ParentActor extends UntypedActor {

    @Override
    public void onReceive(Object msg) {
        for (int i=0; i<1000; i++) {
            final ActorRef childActor = getContext().actorOf(Props.create(childActor.class));
            childActor.tell("Some message", getSelf());
        }
    }
}

謝謝!

可以使用路由器在akka中完成向演員分發工作。

這個想法是將子rsp worker actor的選擇移動到消息流中。

請參閱參考文檔中的頂部示例。 master創建一組名為routeses的子actor,並將它們添加到路由器:

router = new Router(new RoundRobinRoutingLogic(), routees);

路由器可以配置為使用一組不同的路由邏輯實現,這里是一個簡單的循環邏輯。

當消息發送給其中一個子actor時,您可以將它發送到路由器,它關心選擇正確的子節點並將其發送到那里:

router.route(msg, getSender());

getSender可用於傳遞郵件發件人,以防在工作人員中收到郵件,或者您只是傳遞'getSelf()'的結果(或者可能只是沒有,不確定)直接發送它。

暫無
暫無

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

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