[英]java - forward inside Akka actor in ask callback
我们在Java上使用Akka,当在ask
回调中使用Forward时,我们没有得到任何响应,但是当使用tell
它就可以正常工作。 那么区别是什么呢?
final Message message = Message.builder().build();
final ActorRef sender = getSender();
final ActorContext context = getContext();
PatternsCS.ask(actor, Command.builder().build(),
Timeout.durationToTimeout(Duration.create(5, TimeUnit.SECONDS))).thenAccept(result -> {
// do something with result
...
// 1: Does not work
actor.forward(message, context);
// 2: Does work
actor.tell(message, sender);
});
在接收方actor上,在第一种情况下调用getender()
,将评估为DeadLetterActorRef
,在第二种情况下,它将评估为ActorRef
传递的。
那么为什么forward
在这里不起作用? tell(message, sender)
什么区别?
您只能在执行“ actor内部”时使用context
,即仅在receive
或生命周期回调之一中处理消息期间使用context
。
当您在thenAccept
内部使用它时,即使代码是在actor类内部语法定义的,它也将在另一个线程中与actor分离运行。 在另一个线程中, context
将无效。
与原始发件人一起使用tell
替代方法是正确的方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.