2016-09-30 66 views
0

我們計劃開發一個使用AKKA.NET的審計服務網絡api。AKKA.NET與Asp.net網絡API api

的API將收到的審計日誌數據和將產生的審計演員將做一些安全檢查,在一個數據庫中插入數據,並且在任何重大安全隱患的情況下發送電子郵件通知。計劃是使用TELL方法在火災和遺忘機制中進行處理。該API將始終返回200 OK,以便呼叫服務不受影響。

當我們做了一些研究,我們發現大部分帖子的建議在Global.asax中創建的靜態實例ActorSystem,我們發現creaing演員

  1. 菌種演員[用2種方式唯一的名稱],該API內啓動演員的新實例爲每個呼叫和呼叫tell方法
  2. 創建演員的單一靜態實例,並調用告訴法

我們覺得方法2是利用AKKA.NET的最佳方式。我們走在正確的道路上嗎?

+0

演員是否有狀態? – tomliversidge

+0

沒有問題沒有狀態它只會插入數據併發送電子郵件 – sam1977

回答

3

我通常會選擇這種情況下的選項1。你需要考慮如何處理失敗。我可能會創建某種主管角色來處理這個過程,每次你得到一個命令來做到這一點。然後,主管可以創建和監督(即確定如何處理失敗)兩個參與者 - 一個用於保存到數據庫,另一個用於發送電子郵件。主管負責管理流程並在完成後自行殺死(和子女)。

如果您選擇第二個選項,您將爲所有消息設置一個隊列,這樣您將遇到縮放問題。你可以通過設置一個Actor池來解決這個問題,但是我認爲處理重試和失敗會更困難,尤其是如果你需要知道哪些事情已經保存但沒有發送郵件。你可能仍然可以使它工作,特別是如果你不在乎save-then-email過程是否完全完成,但我認爲第一個選項更適合Actor模型。

+0

將爲每個api調用下一個開銷創建3個actor ...另外,我可能需要殺死這些演員後,過程完成..我qmlittle confused ..在這種情況下,我們如何利用AKKA。網..也是在d – sam1977

+0

演員很便宜創建,除非你有很高的流量,我不會擔心這一點。但是,與任何性能問題一樣,您應該測量並監視 – tomliversidge

+0

關於殺死Actor的方面,您可以在過程完成時調用Stop()。見https://petabridge.com/blog/how-to-stop-an-actor-akkadotnet/ – tomliversidge