在父母上向子actor发送消息并等待结果

时间:2014-12-25 00:14:49

标签: java akka actor

我正在尝试从父母发送消息给儿童演员 但是在父actor完成onReceive块之前,消息才会到达。 是以任何方式向子节点发送消息并在父节点上等待结果。

Parent:
onReveive(message) {
    if(message instanceof ChildOrder) {
        onChildOrder(message);
    }
}

onChildOrder(message) {
    Future<Object> future = Patterns.ask(childActorRef, order, timeout);
    Object result = Await.result(future, timeout.duration()); /* this always times out */ 
}

Child:
onReveive(message) {
    do stuff
}

如上所述 Object result = Await.result(future,timeout.duration()); onChildOrder方法上的行总是超时并且父级的onReceive方法完成时 消息ChildOrder到达孩子的onReceive方法。

如果没有父母先完成,孩子似乎无法处理任何消息。

有没有办法向孩子发送消息并等待结果。 ?

1 个答案:

答案 0 :(得分:0)

您需要孩子将结果发送回父母,否则父母会一直等待答案。

在孩子:

@Override
public void onReceive(Object message) throws Exception {
    MyResult res = doStuff(message);
    // send result back
    getSender().tell(res, getSelf());
}

Patterns.ask

的文档中指出了这一点
  

[...]这意味着目标参与者需要将结果发送给提供的发件人参考。


根据评论进行编辑:

从祖父到孩子的转发信息:

如果您需要孩子回送给父母,父母可以将信息转发给孩子,这样孩子的发送者就是父母,因此在回来的路上绕过了父母:

在父母:

@Override
public void onReceive(Object message) throws Exception {
    if(message instance of MessageFromGrandParent) {
        child.forward(message, getContext());
    }
    // ...
}