Akka 快速入門

2021-07-25 11:37:11 字數 2887 閱讀 4726

akka的優點太多,高效能、高可靠、高併發、分布式、可容錯、可擴充套件、事件驅動,不一一敘述。不同版本的api差異很大,本文**執行在 scala 2.10.3 和 akka 2.3.2 之上。

com.typesafe.akkagroupid>

akka-actor_2.10artifactid>

2.3.2version>

dependency>

org.scala-langgroupid>

scala-libraryartifactid>

2.10.3version>

dependency>

定義actor很簡單,繼承 akka.actor.actor ,實現receive方法即可。

class

hello

extends

actor

}

建立actor例項需要通過 actorsystem 。

val system = actorsystem("hellosystem")

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

val hello1 = system.actorof(props[hello])

val hello2 = system.actorof(props(new

hello()))

如果要在 actor 中繼續建立子 actor,需要使用內建的 actorcontext 物件。

context.actorof(props[children], name = "children")

如果要建立遠端 actor,需要通過 actorselection 方法,原 actorfor 方法不再使用。

context.actorselection("akka.tcp:")

巨簡單,就是乙個!,可以傳送任意型別的訊息,此訊息是非同步的。

hello ! "bruce"

hello ! 10086

同步訊息的傳送需要使用 future 物件。

implicit val timeout = timeout(5 seconds)

val future = hello ? "sha"

val result = await.result(future, timeout.duration).asinstanceof[string]

有兩種方式停止乙個actor。

一種是通過內部 actorcontext.stop() 方法,該方法會將 children actor 逐層殺掉後,再自刎。

def

receive =

另一種是外部喂毒藥,通過 actorref.tell() 方法實現。後乙個引數是向誰reply,這裡顯然不需要,傳空。

hello.tell(poisonpill.getinstance, actorref.nosender);

哼哈二將本是兩位佛寺的門神俗稱,是執金剛神的一種。明代**《封神演義》作者陳仲琳據此附會兩員神將,形象威武兇猛。一名鄭倫,能鼻哼白氣制敵;一名陳奇,能口哈黃氣擒將。

object

hengha

extends

val system = actorsystem("henghasystem")

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

val heng = system.actorof(props(new

heng(ha)), name = "heng")

heng ! "start"

}

class

heng(ha: actorref) extends

actor

}

class

haextends

actor

}

run 起來,結果:

哼哈哼

哈哼...

akka 

remote }}

val system = actorsystem("localsystem")

val localactor = system.actorof(props[localactor], name = "localactor") // the local actor

localactor ! "start" // start the action

}

class

localactor

extends

actor }}

akka 

remote }}

object

helloremote

extends

val system = actorsystem("helloremotesystem")

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

remoteactor ! "the remoteactor is alive"

}

class

remoteactor

extends

actor

}

AKKA快速入門

akka的優點太多,高效能 高可靠 高併發 分布式 可容錯 可擴充套件 事件驅動,不一一敘述。不同版本的api差異很大,本文 執行在 scala 2.10.3 和 akka 2.3.2 之上。com.typesafe.akkagroupid akka actor 2.10artifactid 2.3...

akka簡單入門例子

spark版本裡面用到的就是akka通訊,2.0版本 已經不再使用akka了。這裡寫了乙個簡單的akka程式。首先定義2個訊息類object myrequest object myresponse 定義2個通訊的actorclass student teacherref actorref exten...

AKKA 官方文件2 5 8 入門指南

到目前為止,akka 2.5.8版本 當前最新版本 官方文件的入門指南部分已經翻譯完了,第一節那個akka介紹有點無聊就沒翻,本人自感英語水平過差 其實語文也不咋地 所以看看英文文件提公升下詞彙量,然後就順手翻譯了下。為什麼現代系統需要乙個新的程式設計模型 actor模型如何滿足現代分布式系統的需求...