加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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,那么你就可以了.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读