2016-08-05 115 views
0

我正在學習akka,我不知道如何最好地組織,獲取/創建我的演員。akka.net管理演員hiearchy和創建/獲取演員

現在我有一個像

Department (1000s) can each have many items (10000s) and each item has properties and work that can be done to it 

如果我想執行的C項任務是在3系是什麼做到這一點的最佳方式的設置?

我目前已經設置了一切,所以我必須告訴部門3一條消息,然後在部門3的演員,我會告訴項目C演員相同的消息。

我看到這個問題的任何時候我想告訴項目我必須處理2個地方(部門和項目)的消息。這對我來說感覺不對,但也許那是因爲我不瞭解這種模式。

我也希望這是有狀態的,所以我想讓演員堅持下去。這給我帶來了另一個挑戰。我如何知道部門3是否已加載(並且一旦我有部門3,我如何知道是否有已初始化的項目B的演員)?我可以在Context上使用Selection方法,但是我必須檢查它的身份以確定它是否真的存在。我所做的是維護一個加載的部門清單,然後檢查我的部門是否在該清單中,然後獲得部門或創建它。

通過這個過程,我介紹了另一位演員,負責管理我所有部門的列表。現在,我想要發送給我的項目B演員的所有消息都必須經過管理所有部門的演員,部門3演員,最後到項目B演員。現在感覺比以前更糟糕了。

現在我也有部門主管了解所有加載所有消息必須經過的部門(部門目標消息和項目目的地消息)。在這一點上,所有的消息流經這個單身演員,我現在擔心性能和可維護性。

所以我的問題是:是否有一個更好的方式來保持有狀態的這個父/子關係,並且能夠發送消息到一個Item而不知道它所在的Department是否被加載,或者它是否被加載本身?

回答

2

關於檢查Actor是否存在,有一些討論here。一種策略是使用主管人員創建所有部門主管並使用它來管理故障,如here所述。你的主管會知道哪些演員已經創建,並會在失敗時得到通知,所以你可以在這裏處理。

您是否需要將演員分成項目?它們聽起來更像是我的消息類型。你不能只是模擬部門,然後發送他們的項目消息?或者,你可以有DepartmentItem Actor? (即沒有部門演員,只是模擬項目?)。如果你確實需要將項目建模爲演員,那麼我認爲你擁有的是正確的道路 - 帶着孩子的主管是一條路。如果有幫助,您可以隨時轉發郵件:

target.Forward(result, Context);