Java Akka启动和访问参与者返回的数据
我有一个actorJava Akka启动和访问参与者返回的数据,java,akka,Java,Akka,我有一个actorMainActor,它为另外两个子系统初始化并发送消息,并期望得到结果。因此,mainacactor有两个子actorsubactor a和subactor b 基本上,我想要构建一个模型,当来自子参与者的数据到达时,我将能够在更高级别的某个地方访问它(初始化了MainActor的类)) 例如,这两项任务我都有100毫秒。如果SubActorA在70毫秒内返回了数据,但是SubActorB需要更多的时间,那么它将有30毫秒的时间,并且所有任务都将被放弃,但是我仍然对数据感兴趣,
MainActor
,它为另外两个子系统初始化并发送消息,并期望得到结果。因此,mainacactor
有两个子actorsubactor a
和subactor b
基本上,我想要构建一个模型,当来自子参与者的数据到达时,我将能够在更高级别的某个地方访问它(初始化了MainActor的类)
)
例如,这两项任务我都有100毫秒。如果SubActorA
在70毫秒内返回了数据,但是SubActorB
需要更多的时间,那么它将有30毫秒的时间,并且所有任务都将被放弃,但是我仍然对数据感兴趣,并且希望能够访问数据,即使某些子任务已经超时
问题:
UntypedActor
扩展并将消息发送到更高的级别来一次又一次地将数据推送到更高的级别。我曾尝试创建一个WrapperHandler
来初始化MainActor
,但不幸的是出现异常您必须使用一个“actorOf”工厂方法来创建一个新的actor。
当然我可以使用actorOf
方法并调用.tell()
向启动所有作业的参与者发送消息的方法。但是,如果我不再扩展UntypedActor
并且不再重写onreceive()
方法,那么如何获得响应呢谢谢你的帮助 Akka中的一切都基于消息传递。如果您想从参与者那里获取数据,您可以请求(发送消息),参与者将(可能)回复(发送另一条消息) 幸运的是,Akka提供了一个名为
ask
的助手,让您可以从参与者外部发送消息,并作为未来的接收回复。如果您从参与者层次结构之外(或无论您在哪里实例化了MainActor
),通过ask帮助程序向您的MainActor
发送消息,MainActor
将用您的数据进行回复
非常感谢!我的主要参与者应该回答谁?我正在尝试回复getContext().parent().tell(message,getSelf())代码>但超时失败。你知道可能的原因吗?你必须回复发件人。但由于mainacactor
从SubActorA
收到当前消息(它想在actor之外转发),在我的理解中,对发件人的引用将产生无限循环?我的意思是你不能依赖sender()
如果由于一个参与者可能同时收到来自不同子参与者的多条消息,您有多个层次结构。您可以通过构造函数传递侦听器,但在这种情况下,如何在参与者世界之外返回答案?您请求数据并立即将其返回给sender()
。如果该数据在您的层次结构中处于较低的几个级别,那么您必须在每个级别询问,或者使用转发。