我有一个接收消息的演员 - > (标题 - 项目的标题,maxAmount - 他可以支付多少钱)
case Bid(title, maxAmount) => {
val search = ...
search ! Auction.Find(title)
}
然后这个演员发送查找消息以检查拍卖是否可用。如果是这样,它会收到以下消息
case Auction.Result(list) => {
for(auction <- list) {
auction ! Auction.Bid(maxAmount)
}
}
问题是这个maxAmount在本案例部分中不可用。我该如何解决?
答案 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