Akka學習筆記(2) ActorSystem

2021-07-09 22:44:48 字數 2204 閱讀 6815

參考:edwardsbean

官方文件對actorsystem的描述

乙個actor是乙個容器,它包含狀態行為信箱子actor監管策略,所有這些包含在乙個actorreference(actor引用)裡。乙個actor需要與外界隔離才能從actor模型中獲益,所以actor是以actor引用的形式展現給外界的。

如果乙個actor中的業務邏輯非常複雜,為了降低**的複雜度,可以將其拆分成多個子任務(在乙個actor的內部可以建立乙個或多個actor,actor的建立者也是該actor的監控者)

乙個actorsystem應該被正確規劃,例如哪乙個actor負責監控,監控什麼等等:

actorpath是通過字串描述actor的層級關係,並唯一標識乙個actor的方法。

actorpath包含協議位置actor層級關係

//本地path

"akka://my-sys/user/service-a/worker1"

//遠端path

"akka.tcp:"

//akka集群

"cluster://my-cluster/service-c"

獲取actor引用的方式有兩種:建立 和 查詢。

要建立actor,可以呼叫actorsystem.actorof(..),它建立的actor在guardian actor之下,接著可以呼叫actorcontext的actorof(…) 在剛才建立的actor內生成乙個actor樹。這些方法會返回新建立的actor的引用,每乙個actor都可以通過訪問actorcontext來獲得自己(self),子actor(children,child)和父actor(parent)。

要查詢actor reference,可以呼叫actorsystem或actorcontext的actorselection(「path」),在查詢actorref時,可以使用相對路徑或絕對路徑,如果是相對路徑,可以用..來表示parent actor

context.actorselection("../brother")
絕對路徑

context.actorselection("/user/brother")
也可以使用萬用字元*查詢同級別下的所有actor

context.actorselection("../*")
actorof / actorselection / actorfor的區別:當乙個actor建立乙個子actor時,actor系統的部署者會決定新的actor是在同乙個jvm中或是在乙個新的節點上,如果是後者,那麼actor的建立會通過網路連線來到另乙個jvm中進行,結果是新的actor會進入到另乙個actor系統,遠端actor系統會將這個actor放在乙個專為這種場景所保留的特殊路徑下,新的actor的監管者會是乙個遠端actor的引用,這時,context.parent和context.path.parent表示的不是同乙個actor,但是在其監管者中查詢這個actor的名稱,儲存其邏輯結構。

注意圖中展現的兩個不同的actor系統之間的route關係。在左邊的actor系統中,child actor屬於remote actorref,它指向了右邊遠端actor系統中的乙個actor節點,該actor對於右邊的actor系統而言,屬於local actorref,但它的parent actor卻是乙個remote actorref,它指向了左邊對應的local actorref

actor會自動管理我們分配的固定資源。乙個actor system可能有上百萬個actors,畢竟actor是非常輕量級的,每個例項只佔300位元組

Akka學習筆記 Actor訊息傳遞 2

文章目錄 hide 3 teacher actor 我們在前面僅僅討論了actorref的quoterequest,並沒有看到message的類!這裡將介紹,如下 1packageme.rerun.akkanotes.messaging.protocols 2 3objectteacherproto...

Akka學習筆記(3) Actor

actor是akka中的核心概念,它為併發和分布式提供了一種更高階別的抽象,使併發程式設計更加容易。定義actor 定義乙個actor非常簡單 繼承actor,並提供receive方法即可。不帶構造引數的actor class myactor1 extends actor 帶構造引數的actor c...

Akka學習筆記05 Actor的建立

顯而易見,是通過actorof 方法建立乙個actor,但有兩種途徑 運用actor system。如 val system actorsystem myactorsystem val myactor system.actorof props new myactor 10 name myactor ...