gpt4 book ai didi

java - 在ask回调中转发Akka actor内部

转载 作者:行者123 更新时间:2023-12-02 12:23:08 25 4
gpt4 key购买 nike

当在ask内使用forward时,我们将Akka与Java一起使用。回调,但是当使用 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) 有什么区别?

最佳答案

您只能在“执行者内部”执行时使用上下文,即仅在接收中或在生命周期回调之一中处理消息期间。

当您在 thenAccept 内部使用它时,即使代码是在 Actor 类内部按照语法定义的,它也会在另一个线程中与 Actor 分离地运行。在另一个线程中,上下文将无效。

对原始发件人使用 tell 的替代方法是正确的方法。

关于java - 在ask回调中转发Akka actor内部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45628981/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com