Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
akka(java)sender()方法的行为异常_Java_Akka_Actor_Sender - Fatal编程技术网

akka(java)sender()方法的行为异常

akka(java)sender()方法的行为异常,java,akka,actor,sender,Java,Akka,Actor,Sender,是否存在TypedActor.getContext().sender()行为不符合预期的已知情况 我知道在fire and forget模式下,它默认为死信,但我遇到了一些不同的情况: // inside MainActor IPrintingActor printingActor = create(IPrintingActor.class, PrintingActor.class); printingActor.blockingPrintln("foo"); 其中,上面的create只是普

是否存在
TypedActor.getContext().sender()
行为不符合预期的已知情况

我知道在fire and forget模式下,它默认为死信,但我遇到了一些不同的情况:

// 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说

但是,此参与者实际上与TypedActor.context().self()相同

sender()调用返回与self()相同的结果的原因是什么?在主参与者打印中打印语句

演员[akka://MySystem/user/$a]

主要演员和

演员[akka://MySystem/user/$b]

对于PrintingActor。但是,在PrintingActor中,它们都作为

演员[akka://MySystem/user/$b]


非常感谢您的帮助

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


另一方面:我无法复制您的发现(即发送者是
../user/$a
或类似者),但您也没有指定您正在使用的Akka版本。

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


附带说明:我无法复制您的发现(即发件人是
../user/$a
或类似的),但是您也没有指定您正在使用的Akka版本。

我不是Akka方面的专家,因为我的背景来自erlang方面,但如果我没有弄错的话,您直接调用了类的方法,但实际上没有向参与者发送消息。我认为您应该使用bang(!)操作符向ActorTanks发送消息,以便查看这一点,但是我使用的是类型化的actors。因此,我所做的实际上是阻止消息发送,我不是Akka方面的专家,因为我的背景来自erlang方面,但如果我没有弄错的话,您是直接调用类的方法,而不是实际向参与者发送消息。我认为您应该使用bang(!)操作符向ActorTanks发送消息,以便查看这一点,但是我使用的是类型化的actors。因此,我所做的实际上是阻止消息发送给你是正确的,我最近意识到其中一个实际上是作为演员打印的[akka://MySystem/temp/$b]和另一个演员[akka://MySystem/user/$b](临时vs用户)。不过你的回复速度更快。谢谢你是对的,我最近意识到其中一个实际上是作为演员印刷的[akka://MySystem/temp/$b]和另一个演员[akka://MySystem/user/$b](临时vs用户)。不过你的回复速度更快。谢谢