scala – 如何通过询问Akka Actor认为结果不可用作同一消息的响
发布时间:2020-12-16 10:03:36 所属栏目:安全 来源:网络整理
导读:我已经按照本教程: http://doc.akka.io/docs/akka/2.0/intro/getting-started-first-scala.html 基本上有一个主演员响应这两个消息: def receive = { case Calculate = { //.... } case Result(value) = { //.... }} 我们发送消息“计算”,并在几个“结果
我已经按照本教程:
http://doc.akka.io/docs/akka/2.0/intro/getting-started-first-scala.html
基本上有一个主演员响应这两个消息: def receive = { case Calculate => { //.... } case Result(value) => { //.... } } 我们发送消息“计算”,并在几个“结果”(来自奴隶演员)后,我们有正确的计算 现在我在play2控制器的一个动作中,我正在使用它: val promise = (master ? Calculate)(10.seconds).mapTo[String].asPromise 不幸的是(显然)我得不到任何东西,因为Calculate消息确实回复了发送者的消息. 我想以某种方式使Akka Actor等待……并且当计算完成时将消息发送回发送者. 但是如何?…除非我以错误的方式对它进行建模! 解决方法
您应该将消息转发给从属服务器(保留相同的发送者),或者将消息中的发送者包含在服务器中.例如:
def receive = { case Calculate => slave ! CalculateWithSender(sender) case res @ Result(value,originalSender) => val result = resultMap(originalSender) + res // assuming results are just added resultMap += (originalSender -> result) if (resultsAreFinished(originalSender)) originalSender ! result } 要么 def receive = { case Calculate => slave.forward(Calculate) case res @ Result(value,originalSender) => val result = resultMap(originalSender) + res // assuming results are just added resultMap += (originalSender -> result) if (resultsAreFinished(originalSender)) originalSender ! result } 要么 def receive = { case Calculate => slave.tell(Calculate,sender) case res @ Result(value,originalSender) => val result = resultMap(originalSender) + res // assuming results are just added resultMap += (originalSender -> result) if (resultsAreFinished(originalSender)) originalSender ! result } 我不熟悉Play承诺,但是? (问)返回Akka Future.如果.asPromise将Akka Future转换为Play Promise,那么你就可以了. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |