2015-11-02 39 views
0

我有收到一條消息,一個演員 - > (標題 - 項,maxAmount的稱號 - 他是多麼會爲它付出)阿卡歸屬關係查詢和響應

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

那麼這個演員發送Find消息檢查是否有拍賣可用。如果是這樣,它會收到以下消息

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

而問題是此maxAmount在此情況下不可用部分。我該如何解決它?

回答

0

首先想到的解決方案可能是將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()像t他的:

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