Материал, который мне нужен, выделен жирным шрифтом.Akka Соответствие сбоям и восстановлению
У меня есть актер, который летает с несколькими аэрозолями HttpRequests, запросы разбиты на страницы, и актер уверен, что он последовательно записывает результаты в базу данных (последовательность важна для возобновления сканеров). Я объясняю это, потому что сейчас я не хочу изучать другие модели параллелизма. Актеру необходимо восстановить время ожидания без перезапуска.
в моем актера я следующее:
case f : Failure => {
system.log.error("faiure")
system.log.error(s"$f")
system.shutdown()
}
case f : AskTimeoutException => {
system.log.error("faiure")
system.log.error(s"$f")
system.shutdown()
}
case msg @ _ => {
system.log.error("Unexpected message in harvest")
system.log.error(s"${msg}")
system.shutdown()
}
, но я не могу соответствовать правильно:
[ERROR] [11/23/2013 14:58:10.694] [Crawler-akka.actor.default-dispatcher-3] [ActorSystem(Crawler)] Unexpected message in harvest
[ERROR] [11/23/2013 14:58:10.694] [Crawler-akka.actor.default-dispatcher-3] [ActorSystem(Crawler)] Failure(akka.pattern.AskTimeoutException: Timed out)
Мои отправок выглядеть следующим образом:
abstract class CrawlerActor extends Actor {
private implicit val timeout: Timeout = 20.seconds
import context._
def dispatchRequest(node: CNode) {
val reqFut = (System.requester ? CrawlerRequest(node,Get(node.url))).map(r=> CrawlerResponse(node,r.asInstanceOf[HttpResponse]))
reqFut pipeTo self
}
class CrawlerRequester extends Actor {
import context._
val throttler = context.actorOf(Props(classOf[TimerBasedThrottler],System.Config.request_rate),"throttler")
throttler ! SetTarget(Some(IO(Http).actorRef))
def receive : Receive = {
case CrawlerRequest(type_,request) => {
throttler forward request
}
}
}
Как только я нахожу правильный способ сопоставления, re в любом случае я могу получить в руки CrawlerRequest, что тайм-аут произошел с? он содержит некоторое состояние, которое мне нужно выяснить, как восстановить.