我正在尝试从父母发送消息给儿童演员 但是在父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方法。
如果没有父母先完成,孩子似乎无法处理任何消息。
有没有办法向孩子发送消息并等待结果。 ?
答案 0 :(得分:0)
您需要孩子将结果发送回父母,否则父母会一直等待答案。
在孩子:
@Override
public void onReceive(Object message) throws Exception {
MyResult res = doStuff(message);
// send result back
getSender().tell(res, getSelf());
}
的文档中指出了这一点
[...]这意味着目标参与者需要将结果发送给提供的发件人参考。
根据评论进行编辑:
如果您需要孩子回送给父母,父母可以将信息转发给孩子,这样孩子的发送者就是父母,因此在回来的路上绕过了父母:
在父母:
@Override
public void onReceive(Object message) throws Exception {
if(message instance of MessageFromGrandParent) {
child.forward(message, getContext());
}
// ...
}