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