Akka关联查询和响应

时间:2015-11-02 17:02:37

标签: scala akka

我有一个接收消息的演员 - > (标题 - 项目的标题,maxAmount - 他可以支付多少钱)

case Bid(title, maxAmount) => {
  val search = ...
  search ! Auction.Find(title)
}

然后这个演员发送查找消息以检查拍卖是否可用。如果是这样,它会收到以下消息

case Auction.Result(list) => {
  for(auction <- list) {
    auction ! Auction.Bid(maxAmount)
  }
}

问题是这个maxAmount在本案例部分中不可用。我该如何解决?

1 个答案:

答案 0 :(得分:0)

首先想到的解决方案可能是在消息之间的actor代码中保持maxAmount状态。这非常危险,因为您还需要找到一种方法来找出哪个Result属于哪个Find消息。我建议您将信息添加到Find消息中:

case class Find(bid: Bid)

这样你的search演员可以在Result消息中返回它:

case Result(maxAmount: Double, list: List[SomeResultType])

或者你可以使用演员ask pattern

import akka.pattern.ask
case Bid(title, maxAmount) => {
  val search = ...
  val res: Auction.Result = search ? Auction.Find(title)
  res.list.foreach(_ ! Auction.Bid(maxAmount))
}

为了使其正常工作,您的search演员必须像这样回复sender()

case Auction.Find(title) =>
  val res: Result = find(title)
  sender() ! res