Как создать WSClient в Scala?
Здравствуйте, я пишу Scala-код для извлечения данных из API. Данные разбиты на страницы, поэтому я извлекаю данные последовательно. Теперь я ищу решение для параллельного перетаскивания нескольких страниц и создания WSClient программно вместо Inject.
У кого-нибудь есть решение для создания WSClient?
Я нашел AhcWSClient(), но он потребовал неявного импорта системы акторов.
1 ответ
Если вы не можете внедрить один, как предлагается в другом ответе, вы можете создать автономный клиент WS, используя:
import akka.actor.ActorSystem
import akka.stream.ActorMaterializer
import play.api.libs.ws._
import play.api.libs.ws.ahc.StandaloneAhcWSClient
implicit val system = ActorSystem()
implicit val materializer = ActorMaterializer()
val ws = StandaloneAhcWSClient()
Не нужно изобретать велосипед здесь. И я не уверен, почему вы говорите, что не можете ввести WSClient
, Если вы можете ввести WSClient
, тогда вы можете сделать что-то вроде этого для параллельного выполнения запросов:
class MyClient @Inject() (wsClient: WSClient)(implicit ec: ExecutionContext) {
def getSomething(urls: Vector[String]): Future[Something] = {
val futures = urls.par.map { url =>
wsClient.url(url).get()
}
Future.sequence(futures).map { responses =>
//process responses here. You might want to fold them together
}
}
}