Akka學習筆記(3) Actor

2021-07-10 00:15:09 字數 1677 閱讀 5487

actor是akka中的核心概念,它為併發和分布式提供了一種更高階別的抽象,使併發程式設計更加容易。

定義actor

定義乙個actor非常簡單:繼承actor,並提供receive方法即可。

不帶構造引數的actor:

class

myactor1

extends

actor

}

帶構造引數的actor:

class

myactor2

(name: string)

extends

actor

}

建立actor

建立actor的常見方式有兩種,一種是在actorsystem上建立actor,另一種是在乙個actor中建立另乙個actor,構成actor監管樹。

1)在actorsystem上建立actor:

val system = actorsystem("myactorsystem")

//建立不帶構造引數的actor

val myactor1 = system.actorof(props[myactor1], name="actor1")

//建立帶構造引數的actor

val myactor = system.actorof(props(new myactor2("actor2")) name="actor2")

其中name引數是可選的,它指名當前actor的名稱。

2)在actor中建立actor

接觸actor的內建物件context來完成,該物件表示當前actor的上下文

class

firstactor

extends

actor

}}

用這種方式建立的actor與當前actor構造建管樹,當前actor相當於新建立的actor的父actor,可以對actor1與actor2進行生命週期監控。

在actor中有幾個常用的內建物件:

context.actorof(props[myactor1], name = "actor1")
context.system
context.parent
context.children
actor提供了四個hook方法用以對actor的生命週期進行管理,這四個方法分別是 prestart / prerestart / postrestart / poststop,prestart方法在actor被啟動前呼叫,通常用來做初始化,prerestart在重啟actor之前呼叫,postrestart在actor被重啟後呼叫,poststop 在actor被停止後呼叫,通常用來清理資源。

一下是四個鉤子方法的預設實現:

def prestart() {}

def prerestart(reason: throwable, message: option[any])

def postrestart(reason: throwable)

def poststop() {}

Akka學習筆記 Actor訊息傳遞 2

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

Akka學習筆記05 Actor的建立

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

Akka學習筆記06 Actor的訊息

向actor傳送訊息,分為兩種方式 1.tell,或者使用符號 沒有返回值。寫法如下 actor msg or actor.tell msg or actor tell msg 如果需要指定傳送訊息的actor,可以寫成 actor.tell msg,anotheractorref 2.ask,或者...