的文檔FlowOps#concat
指出如何延遲附加到另一個akka流的akka流的實現?
...源一起使用這個流程化,並從生產,直到它的時間來斷言背壓元素只是不停。
換句話說,如果我有
sourceA.concat(sourceB)
然後sourceB
將在同一時間sourceA
物化。
我如何推遲sourceB
正在實現,直到sourceA
完成?
我正在使用Akka 2.5.6。
的文檔FlowOps#concat
指出如何延遲附加到另一個akka流的akka流的實現?
...源一起使用這個流程化,並從生產,直到它的時間來斷言背壓元素只是不停。
換句話說,如果我有
sourceA.concat(sourceB)
然後sourceB
將在同一時間sourceA
物化。
我如何推遲sourceB
正在實現,直到sourceA
完成?
我正在使用Akka 2.5.6。
您是否嘗試過使用Source.lazily()
?
下面是它的斯卡拉醫生說:
創建一個沒有實現,直到有下游需求
Source
,當源被物化物化未來完成了它的價值,如果下游取消或沒有失敗任何需求創建工廠永遠不會被調用,物化Future
失敗。
參見:https://doc.akka.io/docs/akka/2.5.6/scala/stream/stages-overview.html#lazily
即:
sourceA.concat(Source.lazily(() => sourceB))
問題是concat足夠令人驚訝地渴望,並要求第一個馬上就會連接源代碼中的元素,這也會立即觸發懶惰的源代碼,但有一個問題會跟蹤這個問題:https://github.com/akka/akka/issues/23044 – johanandren
你能解釋一下你爲什麼要這麼做?既然流量回歸期貨,你可以等待未來完成,然後開始下一個流? – Tyler
我連接的來源是數據庫查詢。我已經開始在這些查詢中獲取(當前)無法解釋的數據庫超時。我想消除這樣的可能性,即並行地使用這麼多查詢觸發數據庫會導致問題。 (如果是這樣,我會感到驚訝,但我沒有太多東西要繼續下去,所以我正處於消除可能性的階段。) – dave4420