2015-11-02 2 views
0

У меня есть актер, который получит сообщение -> (название - название пункта, maxAmount - сколько он может заплатить за него)Akka коррелируют запрос и ответ

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

этот актер отправить найти сообщение чтобы проверить, доступен ли данный аукцион. Если это так, оно получает следующее сообщение:

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

И проблема в том, что этот максимальный размер недоступен в этом разделе. Как я могу это исправить?

ответ

0

Первое решение, которое появляется в виду, может содержать maxAmount как состояние в коде вашего актора между сообщениями. Это довольно опасно, потому что тогда вам также нужно найти способ узнать, кому принадлежит ResultFind. Я предлагаю вам добавить информацию в 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() like t его:

case Auction.Find(title) => 
    val res: Result = find(title) 
    sender() ! res 
Смежные вопросы