2015-06-24 2 views
0

Я работаю на трубопроводеДолжен ли я использовать синхронизацию httpclient или async http-клиента в потоках Akka?

Source(datafile)--> Flow(web scraping with entry in file)--> Flow(extraction of items form page) --> Flow(query to another services) --> Sink(cmp and summary) 

Поскольку Akka HTTP клиент пока не существует, что HTTP-клиент Lib в Скале вы рекомендуете? Могу ли я использовать http-клиент aysnc с потоком Akka? Мне кажется, это не так. Если да, какой lib является лучшим выбором для такого рода приложений?

+1

Вы можете использовать [Dispatch] (http://dispatch.databinder.net/Dispatch.html), который использует async-http-client. –

ответ

0

Разбор тела Akka-Http теперь всегда возвращает Source самостоятельно.

Поэтому использовать Unmarshal или toStrict, чтобы получить доступ к организации (орган) в ответ и использовать mapAsync чтобы Akka обрабатывать параллелизм/обратный вызов:

// Create your HttpRequests objects 
var in = Sink.... 
// Use Akka to connect 
var http.superPool[NotUsed] 
// Parse the response 
val httpResponse2HttpStrict = Flow[(Try[HttpResponse], NotUsed)].mapAsync(1)({case(response, _) => response match { 
    case Success(response) => response.entity.toStrict(timeout) 
    case Failure(e) => handleErrorHere(e) 
}) 

// Connect it 
in ~> httpClient ~> httpResponse2HttpStrict ~> Flow[HttpEntity].map(entity => processTheBody(entity) 

API-интерфейс потока описан здесь: http://doc.akka.io/docs/akka/2.4.6/scala/http/client-side/request-level.html#Flow-Based_Variant

Смежные вопросы