Akka关联查询和响应

Akka correlate query and response

我有一个接收消息的演员 -> (title - 物品的标题,maxAmount - 他可以为它支付多少)

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

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

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

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

第一个想到的解决方案可能是在消息之间的 actor 代码中维护 maxAmount as 状态。这是相当危险的,因为那时你还需要找到一种方法来找出哪个 Result 属于哪个 Find 消息。我建议您将信息添加到 Find 消息中:

case class Find(bid: Bid)

以便您的 search 演员可以 return 在 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