есть 2 примера кода.
Первый пример успешно выполняется и завершается:
case class Scrap(url:String)
case class Stop()
class Scrapper extends Actor with ActorLogging {
var count = 0
def getDoc(url: String): org.jsoup.nodes.Document = {
val user_agent: String = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1"
val response = Jsoup.connect(url).timeout(3000).ignoreContentType(true).userAgent(user_agent).execute()
val contentType: String = response.contentType
val doc = response.parse()
doc }
override def postStop() = {
context.system.terminate
}
def receive = {
case Scrap(url) =>
println(s"scraping $url")
val content = getDoc(url)
println(content.title)
count += 1
}
}
object Main extends App{
implicit val timeout = Timeout(2 seconds)
val system = ActorSystem()
val supervisor = system.actorOf(Props(new Scrapper ))
for(i<-0 to 10 ) {
supervisor ! Scrap("
http://football.ua")
}
supervisor ! PoisonPill
}
Второй пример, с использованием Future в receive, выполняется, но не завершается.
def receive = {
case Scrap(url) =>
println(s"scraping $url")
val content = Future{getDoc(url)}
content onComplete {
case Success(content)=>
println(content.title)
count += 1
case Failure(content)=>
println("Failure")
}
object Main extends App{
implicit val timeout = Timeout(2 seconds)
val system = ActorSystem()
val supervisor = system.actorOf(Props(new Scrapper ))
for(i<-0 to 10 ) {
supervisor ! Scrap("
http://football.ua")
}
Await.result(system.whenTerminated, Duration.Inf)
supervisor ! PoisonPill
}
Прошу подсказки в вопросе