今天從研討會上認識了Akka.net這個框架。它主要是用來做分散式運算的。除了可以在本機上做之外,透過它的套件,就可以跨主機。
由於它都被人家拿來當一個研討會的項目來說明,所以就藉此來認識一下。
以下是進行它的Bootcamp教學時,所記錄的一些心得。
它的BootCamp教學就放在GitHub上,所以透過以下的網址就可以一步步學習。
https://github.com/petabridge/akka-bootcamp
Unit1
1.1
- 在Akka的世界裡,最主要的角色是Actor。
- Actor用來傳遞訊息
- Actor透過Prop來產生
- 所有的Actor都屬於ActorSystem
- ActorSytem在一個Application只能有一個
- 在Akka內很少有用new的,幾乎都是透過工廠方法產生的。
在unit1的練習中,它產生了兩個Actor,一個是ConsoleReader,一個是ConsoleWriter。它先在ConsoleReader的OnReceive方法中,要求要讀取Console,因此當OnReceive方法被呼叫時,其實就會有一個緒卡在讀取Console這裡,直到有人輸入字後才會再往下走。
因此程式一開始,就對ConsoleReader呼叫 Tell("start"),其實這邊打什麼字都無所謂,只是為了要觸發OnReceive方法,開始監控Console的輸入。
而ConsoleReader除了接收輸入外,還要對輸入進行判斷,印到Console上,所以在對ConsoleReader初始化時,還注入了ConsoleWriter,用來將結果印到Console上。
相對ConsoleReader,ConsoleWriter的任務就較簡單,就是將輸入的參數寫到Console上即可。
1.2
在這個單元中,我們將傳輸的訊息重新定義。
定義的方式從原本的字串變成以下兩種
之前都是直接用字串傳送,接收者將object轉型成字串,判斷字串再做決定。
我們定義了訊息的類別,因此就不再傳字串╡而是傳訊息物件。
在訊息的物件上,我們將訊息先分
定義的方式從原本的字串變成以下兩種
- 類別
- 常數字串
之前都是直接用字串傳送,接收者將object轉型成字串,判斷字串再做決定。
我們定義了訊息的類別,因此就不再傳字串╡而是傳訊息物件。
在訊息的物件上,我們將訊息先分
- 成功訊息
- 失敗訊息
然後再失敗訊息再透過繼承產生特定的錯誤類別。
在判斷時,就直接透過 is 來決定是不是錯誤訊息,再做進一步分類。
1.3
這個單元主要介紹Actor的產生方式,並且透過將Validator邏輯從現有程式的移出來重構程式碼。
Actor產生方式透過Prop這個類別,它有三種產生Actor的方式
- Prop.Create(typeof(xxx)) 最不建議使用
- Prop.Create<xxx>(); 建議使用,針對沒有建構子的Actor
- Prop.Create(()=>new xxx());建議使用,尤其在建構子有輸入參數的時候
建立好之後,我們還要將它設定給ActorSystem,納入管理。給ActorSystem的方式透過
ActorSystem.Actof(xxx,"xxxName");
其中名字可填可不填,但是建議要填寫。因為Debug的時候會很有用處。
1.4
這個單元說明Actor在ActorSystem中的關係。
簡單說,它是一個樹。所以在樹中的結點都是一個Actor。
每一個Actor都被它上層的Actor接管。
所謂接管是指在本Actor出錯時,例外會上拋至上一層Actor。
由上一層Actor來下指示決定要如何處理例外。
上層處理例外時,可以做出以下幾個決定
- Restart:重啟子Actor,這是預設的決定
- Stop:停止子Actor
- Escalate:停止自己,並且讓自己的上一層決定
- Resume:無視錯誤,當做沒發生
決定了以上的處理方式時,還可以決定要處理的對像範圍,由以下兩種
- One-For-One:只針發出問題的Actor
- All-For-One:針對發出問題的Actor及他的所有sibling
要設計這種結構的目的在於將防止錯誤的發散
1.5
這個單元介紹如何以搜尋的方式,取得特定的Actor。以下是注意的事項
- 找到的Actor可能不只一個
- 找尋的時候,可能與當下的位置有關係 (相對位置而不是絕對位置)
- 一般不建議使用,除非是動態行為或是為了在程式發佈後,避免大幅度的修改。
- 有些時候,為了要將Actor傳給特定物件,可能會層層傳遞,此時也可以透過搜尋的方式 Decoupling
1.6
Actor的生命週期有以下五種
Starting ->Receiving -> Stopping -> Terminating -> Restarting
Starting ->Receiving -> Stopping -> Terminating -> Restarting
- Starting:被ActorSystem啟用後
- Receiving:可以開始接收訊息
- Stopping:資料被清除,可能有兩種原因 Terminating 或是 Restarting
有四個方法會在這些狀態改變時被呼叫,分別是
- PreStart:在Receiving前被呼叫,此時適合做Actor的initialize的行為
- PreRestart:在Actor被Parent重啟前呼叫,此時可以儲存當下的資料,做為後續錯誤修復時使用
- PostStop:在Tememnated及ReStart時會呼叫
- PostRestart:在Restart前會進行呼叫,且呼叫後,會接著呼叫PostStop

沒有留言:
張貼留言