2015-06-24 38 views
8

有本說明中akka-stream docs說明如下:直播資源

...可重複使用的流程描述不能綁定到「活」資源,這些資源的任何連接或分配必須推遲到實現時間。 「實時」資源的例子是已有的TCP連接,多播發布者等; ...

我有一個關於注意到幾個問題:

    來自這兩個例子,還有什麼其他資源作爲現場計數
  • 除?
    • 任何不能安全(深)複製的東西?像Thread
    • 我是否也應該避免共享不是線程安全的任何東西?
  • 怎麼樣ActorRef存在於ActorSystem使用的ActorFlowMaterializer
  • 如何推遲分配,直到物化時間?例如在PushPullStage的構造函數中分配它,但在FlowGraph的創建函數中分配它是否安全?
+0

根據我的理解,您的圖不應該直接引用「資源」,而應該包含在實現時查找資源的功能。演員參考資料應該很好,因爲它非常相似。 – dwegener

回答

2

如果我們考慮webservices,RMI連接或任何其他通信協議,這裏的問題是一個常見的問題。總是建議共享「原始」值然後引用,因爲編組/解組或序列化/反序列化總是頭疼。也想到不同類型的環境相互溝通。共享固體價值是解決溝通的安全途徑。

Akka本身就是一個很好的「微服務」互相交流演員的例子。當我閱讀Akka的文檔時,一個很好的詞很好地定義了Akka演員。參與者就像郵箱客戶端,你可以想到每個客戶端都有一個郵箱。當你傳遞一個變量時,就像你有一封新郵件。

長故事的短期結果是,避免共享可從其他演員讀取之前無效的「依賴」對象。此外,如果您的系統動態地命名actorRefs,請避免通過引用來調用它們。

「物化」在阿卡流文件中有解釋。

實現的過程可以參數化,例如,通過關於連接地址和端口信息的特定信息實例化處理TCP連接數據的藍圖。此外,物化通常會創建特定的對象,這些對象在運行時與處理引擎進行交互很有用,例如用於關閉處理引擎或提取度量標準。這意味着實現函數從外部獲取一組參數併產生一組結果。合成性要求這兩個集合不能相互作用,因爲這會建立一個隱藏的通道,通過這個通道,不同的部件可以進行通信,從而導致初始化順序和難以解決的運行時間故障。

因此,使用參數而不是傳遞「連接」本身。

推遲活的資源並不是一個大的想法。這意味着,如果您爲所有系統使用一個連接,則應始終保持其連接狀態。或者,當您在actor-1中創建一個事務並將其發送給actor-2時,您不應該在actor-1中結束事務,直到actor-2使用事務完成它的工作。

那你怎麼理解?然後你使用「Future」和「offer()」。

希望我明白你的問題,希望我能表達自己。