Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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
Java Akka启动和访问参与者返回的数据_Java_Akka - Fatal编程技术网

Java Akka启动和访问参与者返回的数据

Java Akka启动和访问参与者返回的数据,java,akka,Java,Akka,我有一个actorMainActor,它为另外两个子系统初始化并发送消息,并期望得到结果。因此,mainacactor有两个子actorsubactor a和subactor b 基本上,我想要构建一个模型,当来自子参与者的数据到达时,我将能够在更高级别的某个地方访问它(初始化了MainActor的类)) 例如,这两项任务我都有100毫秒。如果SubActorA在70毫秒内返回了数据,但是SubActorB需要更多的时间,那么它将有30毫秒的时间,并且所有任务都将被放弃,但是我仍然对数据感兴趣,

我有一个actor
MainActor
,它为另外两个子系统初始化并发送消息,并期望得到结果。因此,
mainacactor
有两个子actor
subactor a
subactor b

基本上,我想要构建一个模型,当来自子参与者的数据到达时,我将能够在更高级别的某个地方访问它(初始化了
MainActor的类)

例如,这两项任务我都有100毫秒。如果
SubActorA
在70毫秒内返回了数据,但是
SubActorB
需要更多的时间,那么它将有30毫秒的时间,并且所有任务都将被放弃,但是我仍然对数据感兴趣,并且希望能够访问数据,即使某些子任务已经超时

问题:

  • 如何将整个执行时间限制为100毫秒,以便将来能够部分访问来自每个参与者的数据

  • 如何从最高级别的参与者访问数据?我不能一直通过从
    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()
    。如果该数据在您的层次结构中处于较低的几个级别,那么您必须在每个级别询问,或者使用
    转发