繁体   English   中英

java-在Ask回调中在Akka actor中转发

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM