Java 对Patterns.ask()中发件人的外部访问

Java 对Patterns.ask()中发件人的外部访问,java,akka,distributed-computing,actor,Java,Akka,Distributed Computing,Actor,当调用Patterns.ask()时,我需要访问发送者参与者。例如: ActorSystem system = ActorSystem.create("MySystem"); ActorRef actor = system.create(..., "MyActor"); Future<Object> futureResult = Patterns.ask(actor, new Question(), 10000); actorsystemsystem=ActorSystem.cre

当调用Patterns.ask()时,我需要访问发送者参与者。例如:

ActorSystem system = ActorSystem.create("MySystem");
ActorRef actor = system.create(..., "MyActor");
Future<Object> futureResult = Patterns.ask(actor, new Question(), 10000);
actorsystemsystem=ActorSystem.create(“MySystem”);
ActorRef actor=system.create(…,“MyActor”);
Future futureResult=Patterns.ask(演员,新问题(),10000);
在这里,Akka框架将“MyActor”参与者发送一条消息,参与者必须通过以下方式响应:
getSender().tell(…)

发送方将是由Akka框架创建的参与者-其路径可能如下所示:
akka://MySystem/temp/$a
我如何才能获得该演员的演员REF

我有上面给出的路径,但是当我调用
system.actorSelection
然后使用
resolveOne
时,我得到一个错误,说这个参与者不存在(注意:我知道这个发送者参与者将在收到答案后立即被杀死-我所做的测试甚至在调用
getSender().tell()
方法之前)

当我的项目中的Akka版本更新为2.5.4时,出现了一个问题。在此之前,我访问temp/sender演员没有问题

我读过关于
Patterns.ask(ActorRef actor,Function messageFactory,Timeout Timeout)
的文章,但我没有利用它,因为我正在努力理解它背后的思想(也找不到例子)。所以,如果上述方法是一种解决方案,你们能给我一个示例使用它吗

如果我上面的任何陈述是完全正确的或错误的-请进行更正!:)


谢谢您抽出时间来

我解决这个问题的方法是将原始消息包装在一个“AskMessage”类中。然后,当收到这样一条消息时,我的参与者将创建一个临时参与者,其唯一目的是处理这条消息。在那之后,演员将被停职。此参与者将通过我的应用程序的内部API通知结果。

我解决此问题的方法是将原始消息包装在一个“AskMessage”类中。然后,当收到这样一条消息时,我的参与者将创建一个临时参与者,其唯一目的是处理这条消息。在那之后,演员将被停职。此参与者将通过我的应用程序的内部API通知结果。

>我如何才能获得此参与者的ActorRef?这样做有什么意义?响应消息无论如何都会被临时参与者忽略。因为我的业务逻辑需要它-我正在构建一个API,该API提供在系统中创建参与者的功能。在某个时刻(当调用实际的
Patterns.ask()
时),将为这个临时参与者请求我的API。这是因为客户决定了演员的行为。为此,我的客户端实现了一个函数,它需要三件事:selfActor、senderActor和消息本身。你所说的“决定演员的行为”是什么意思:a)找出演员在做什么,或b)设定演员的行为?A) 很简单:它将单个消息的内容设置为承诺的值,b)没有意义,因为您不会使用ask()而是创建自己的参与者。还有,假设你获得了演员裁判,你打算用它做什么,它应该如何使用?我看不到任何有意义的内容,因为
MyActor
将发送一个答案,然后您的actor将消失,ref将无效。请参阅。>我如何才能获取此actor的ActorRef?这样做有什么意义?响应消息无论如何都会被临时参与者忽略。因为我的业务逻辑需要它-我正在构建一个API,该API提供在系统中创建参与者的功能。在某个时刻(当调用实际的
Patterns.ask()
时),将为这个临时参与者请求我的API。这是因为客户决定了演员的行为。为此,我的客户端实现了一个函数,它需要三件事:selfActor、senderActor和消息本身。你所说的“决定演员的行为”是什么意思:a)找出演员在做什么,或b)设定演员的行为?A) 很简单:它将单个消息的内容设置为承诺的值,b)没有意义,因为您不会使用ask()而是创建自己的参与者。还有,假设你获得了演员裁判,你打算用它做什么,它应该如何使用?我看不到任何有意义的东西,因为
MyActor
将发送一个答案,然后您的actor将消失,并且ref将不再有效。请参阅。