Yeni Akka akışlarını kullanmaya çalışıyorum ve kaynak kuyruğunu nasıl kullanabileceğimi ve kodumda materyalleştirmeden nasıl arama yapabileceğimi merak ediyorum.Kaynak kuyruğunu araya getirmeden arayanı nasıl kullanabilirim?
Zaman uyumsuz çağrıların sayısını yapan ve sonuçları Source
aracılığıyla döndüren kitaplığımız olduğunu düşünün. Fonksiyon bu
def findArticlesByTitle(text: String): Source[String, SourceQueue[String]] = {
val source = Source.queue[String](100, backpressure)
source.mapMaterializedValue { case queue =>
val url = s"http://.....&term=$text"
httpclient.get(url).map(httpResponseToSprayJson[SearchResponse]).map { v =>
v.idlist.foreach { id =>
queue.offer(id)
}
queue.complete()
}
}
source
}
benziyor ve ben asla çalıştırılmaz mapMaterializedValue
içinde bu kodu çalıştırdığınızda arayan bu
// There is implicit ActorMaterializer somewhere
val stream = plugin.findArticlesByTitle(title)
val results = stream.runFold(List[String]())((result, article) => article :: result)
gibi kullanabilir.
Kaynağın nasıl gerçekleştirileceğine karar vermek için arayan kişiye kalsa, neden SourceQueue
örneğine erişemediğimi anlayamıyorum.
Bunu nasıl uygulamalıyım?
Sonuç, sonuçların yinelenmesi ve bu yinelenebilir kaynaktan üretilmesi yerine, değer üretilirken kuyruğun doldurulmasının nedeni nedir? Val ids: Iterable [String] = httpclient.get (url) .map (...); val kaynağı = Source.from (ids) '? – devkat
Beton koleksiyonunun kullanımı, nesnelerin varışına bir süre sonra varmayı kabul eden “Kaynak” fikrini azaltmaktadır. Kütüphane fonksiyonunun trilyonlarca belgeyi geri getireceğini düşünün. Müşteri, geldikleri gibi işleyebilmelidir. – expert