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;
}
输出
演员[akka:// MySystem / user / $ b]说foo
但是,这个actor实际上与TypedActor.context()。self()相同。
sender()调用的任何原因都会返回与self()相同的原因吗?打印主要参与者的声明
演员[阿卡:// MySystem /用户/ $ A]
用于MainActor和
演员[阿卡:// MySystem /用户/ $ B]
用于PrintingActor。但是,在PrintingActor中,它们都打印为
演员[阿卡:// MySystem /用户/ $ B]
非常感谢!
答案 0 :(得分:1)
表示方法调用的消息的发送者将始终是由“ask”模式生成的临时actor,例如, .../temp/$a
。原因是它不是接收回复的actor,而是一些内部实体,然后将回复值作为方法调用返回值返回。因此无论如何实现,您都不会看到将方法的调用站点作为发送者封装的actor的引用。
在旁注:我无法重现您的发现(即发件人是.../user/$a
或类似的),但您也没有指定您使用的Akka版本。