Yeni akka.http
kitaplığını nasıl kullanacağımı anlamaya çalışıyorum. Bir sunucuya bir http isteği göndermek ve Source[String,?]
üretmek için tüm yanıt gövdesini tek bir String olarak okumak istiyorum. İşteTüm HttpResponse gövdesini Akka-Streams HTTP ile bir dize olarak alın
şimdiye kadar üretmek mümkün oldu en iyi çözümdür:
def get(
modelID: String,
pool: Flow[(HttpRequest,Int),(Try[HttpResponse],Int),Http.HostConnectionPool]
): Source[String,Unit] = {
val uri = reactionsURL(modelID)
val req = HttpRequest(uri = uri)
Source.single((req,0))
.via(pool)
.map {
case (Success(resp),_) =>
resp.entity.dataBytes.map(_.decodeString("utf-8"))
}.flatten(FlattenStrategy.concat)
.grouped(1024)
.map(_.mkString)
O (eksik hata yolu hariç) iyi iş gibi görünüyor, ancak böyle basit görevler için biraz aksak. Daha akıllı bir çözüm var mı? grouped
/mkString
'dan nasıl yararlanabilirim?
OK. Ama bir "Kaynak [String, Unit] 'e ihtiyacım var çünkü uygulamak için daha fazla dönüşümüm var. Çözümünüzle birlikte, Materializer ve ExecuctionContext boyunca geçip yeni bir Kaynakta tekrar bir şeyler yapmam gerekecek ... Bir şey mi özledim yoksa bir şey mi özledim? – paradigmatic
@paradigmatic Örnek ekliyorum. ExecutionContext ve materializer örtülü argümanlar olarak ayarlanabilir. – Zernike