gpt4 book ai didi

java - 在 Patterns.ask() 中对发送者进行外部访问

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

当进行 Patterns.ask() 调用时,我需要访问 sender actor。示例:

ActorSystem system = ActorSystem.create("MySystem");
ActorRef actor = system.create(..., "MyActor");
Future<Object> futureResult = Patterns.ask(actor, new Question(), 10000);

这里,Akka 框架将发送消息“MyActor” actor,该 actor 必须通过以下方式响应:getSender().tell(...)

发送者将是由 Akka 框架创建的 actor - 它的路径可能如下所示:akka://MySystem/temp/$a )。 如何我可以获得该 Actor 的ActorRef

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

当我的项目中的 Akka 版本更新到2.5.4时,这个问题就出现了。在此之前,我访问 temp/sender Actor 没有任何问题。

我读过Patterns.ask(ActorRef actor, Function<ActorRef,java.lang.Object> messageFactory, Timeout timeout)但没有设法利用它,因为我正在努力解决它背后的想法(也找不到例子)。那么,如果上述方法在某种程度上是一种解决方案,你们能给我一个它的示例用法吗?

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

感谢您抽出时间!

最佳答案

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

关于java - 在 Patterns.ask() 中对发送者进行外部访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46283214/

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