gpt4 book ai didi

java - akka (java) sender() 方法行为奇怪

转载 作者:太空宇宙 更新时间:2023-11-04 07:45:04 24 4
gpt4 key购买 nike

任何已知的 TypedActor.getContext().sender() 行为不符合预期的情况?

我知道在“即发即弃”模式下,它默认为“deadLetters”,但是我遇到了不同的情况:

// inside MainActor

IPrintingActor printingActor = create(IPrintingActor.class, PrintingActor.class);
printingActor.blockingPrintln("foo");

上面的 create 只是通常的 typedActorOf 调用的包装

// inside PrintingActor
@Override
public boolean blockingPrintln(String string)
{
System.out.println(TypedActor.context().sender() + " says " + string);
return true;
}

输出为

Actor[akka://MySystem/user/$b] says foo

但是,这个 actor 实际上与 TypedActor.context().self() 相同。

sender() 调用返回与 self() 相同的任何原因吗?在主要 Actor 打印中打印语句

Actor[akka://MySystem/user/$a]

对于MainActor 和

Actor[akka://MySystem/user/$b]

对于PrintingActor。然而,在 PrintingActor 中,它们都被打印为

Actor[akka://MySystem/user/$b]

非常感谢您的帮助!

最佳答案

表示方法调用的消息的发送者将始终是由“ask”模式生成的临时参与者,例如.../temp/$a。原因是,接收回复的不是参与者,而是某个内部实体,然后将回复值作为方法调用返回值返回。因此,无论它是如何实现的,您都永远不会看到将方法的调用站点作为发送者的参与者的引用。

旁注:我无法重现您的发现(即发件人是 .../user/$a 或类似的),但您也没有指定您正在使用哪个版本的 Akka。

关于java - akka (java) sender() 方法行为奇怪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15444104/

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