2017-10-20 54 views
0

的文檔FlowOps#concat指出如何延遲附加到另一個akka流的akka​​流的實現?

...源一起使用這個流程化,並從生產,直到它的時間來斷言背壓元素只是不停。

換句話說,如果我有

sourceA.concat(sourceB) 

然後sourceB將在同一時間sourceA物化。

我如何推遲sourceB正在實現,直到sourceA完成?

我正在使用Akka 2.5.6。

+0

你能解釋一下你爲什麼要這麼做?既然流量回歸期貨,你可以等待未來完成,然後開始下一個流? – Tyler

+0

我連接的來源是數據庫查詢。我已經開始在這些查詢中獲取(當前)無法解釋的數據庫超時。我想消除這樣的可能性,即並行地使用這麼多查詢觸發數據庫會導致問題。 (如果是這樣,我會感到驚訝,但我沒有太多東西要繼續下去,所以我正處於消除可能性的階段。) – dave4420

回答

1

您是否嘗試過使用Source.lazily()

下面是它的斯卡拉醫生說:

創建一個沒有實現,直到有下游需求Source,當源被物化物化未來完成了它的價值,如果下游取消或沒有失敗任何需求創建工廠永遠不會被調用,物化Future失敗。

參見:https://doc.akka.io/docs/akka/2.5.6/scala/stream/stages-overview.html#lazily

即:

sourceA.concat(Source.lazily(() => sourceB)) 
+0

問題是concat足夠令人驚訝地渴望,並要求第一個馬上就會連接源代碼中的元素,這也會立即觸發懶惰的源代碼,但有一個問題會跟蹤這個問題:https://github.com/akka/akka/issues/23044 – johanandren