Akka是用於在JVM上構建高度並發、分布式和容錯的事件驅動應用程序的工具包和運行時環境。 Akka可以與Java和Scala一起使用。本指南通過描述Hello World示例的Java版本來介紹Akka。如果你喜歡在Scala中使用Akka,請切換到Scala版的Akka快速入門。
Actor是阿卡的執行單位。 Actor模型是一種抽象,可以更容易地編寫正確的並發,並行和分布式係統。 Hello World示例說明了Akka的基本知識,通過這個示例,在30分鍾內,您應該能夠下載並運行示例並使用本指南了解示例的構建方式。
在嘗試了這個例子後,綜合入門指南是繼續學習更多關於Akka的不錯選擇。
下載示例
用於Java的Hello World示例是一個壓縮項目,其中包含Maven和Gradle的構建文件。您可以在Linux,MacOS或Windows上運行它。唯一的先決條件是Java 8和安裝Maven的或者Gradle。
下載並解壓縮示例:
- 從Lightbend Tech Hub通過點擊
CREATE A PROJECT FOR ME下載zip文件
。 - 將zip文件解壓縮到一個方便的位置:
- 在Linux和OSX係統上,打開一個終端並使用該命令
unzip akka-quickstart-java.zip
。 - 在Windows上,使用文件資源管理器等工具來提取項目。
運行示例
確保您已安裝您選擇的構建工具,然後打開終端窗口,並從項目目錄中鍵入以下內容以運行Hello World:
- Maven的
-
$ mvn compile exec:exec
- 搖Gradle籃
-
$ gradle run
輸出應該看起來某物像這樣(一直向右滾動以查看Actor輸出):
- Maven的
-
[INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building app 1.0 [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- exec-maven-plugin:1.6.0:exec (default-cli) @ app --- >>> Press ENTER to exit <<< [INFO] [05/11/2017 14:07:20.790] [helloakka-akka.actor.default-dispatcher-2] [akka://helloakka/user/printerActor] Hello, Java [INFO] [05/11/2017 14:07:20.791] [helloakka-akka.actor.default-dispatcher-2] [akka://helloakka/user/printerActor] Good day, Play [INFO] [05/11/2017 14:07:20.791] [helloakka-akka.actor.default-dispatcher-2] [akka://helloakka/user/printerActor] Howdy, Akka [INFO] [05/11/2017 14:07:20.791] [helloakka-akka.actor.default-dispatcher-2] [akka://helloakka/user/printerActor] Howdy, Lightbend
- Gradle
-
:compileJava UP-TO-DATE :processResources NO-SOURCE :classes UP-TO-DATE :run >>> Press ENTER to exit <<< [INFO] [05/11/2017 14:08:22.884] [helloakka-akka.actor.default-dispatcher-2] [akka://helloakka/user/printerActor] Howdy, Akka [INFO] [05/11/2017 14:08:22.884] [helloakka-akka.actor.default-dispatcher-2] [akka://helloakka/user/printerActor] Good day, Play [INFO] [05/11/2017 14:08:22.884] [helloakka-akka.actor.default-dispatcher-2] [akka://helloakka/user/printerActor] Hello, Java [INFO] [05/11/2017 14:08:22.884] [helloakka-akka.actor.default-dispatcher-2] [akka://helloakka/user/printerActor] Howdy, Lightbend <=========----> 75% EXECUTING > :run
恭喜,你剛剛跑了你的第一個Akka應用程序。接下來研究一下發生了什麽。
Hello World示例完成的工作
正如您在控製台輸出中看到的那樣,該示例會輸出幾個問候語。我們來看看運行時會發生什麽。
首先,main類
創建一個akka.actor.ActorSystem
,它是Actor運行的一個容器。接下來,它創建三個Greeter Actor和一個Printer Actor。
然後該示例將消息發送給Greeter Actor實例,並將其存儲在內部。最後,給Greeter Actors的指令消息觸發它們發送消息給Printer Actor,它將它們輸出到控製台:
Akka使用Actor和異步消息傳遞會帶來一係列好處,有哪些好處呢?
使用Actor模型的好處
Akka的以下特征使您能夠以直觀的方式解決困難的並發性和可伸縮性挑戰:
- Event-driven事件驅動模型 – Actor根據消息執行工作。參與者之間的通信是異步的,允許參與者發送消息並繼續他們自己的工作,而不會阻止等待答複。
- 強大的隔離原則 – 與Java中的常規對象不同,Actor在您可以調用的方法方麵沒有公共API。相反,它的公共API是通過actor處理的消息定義的。這可以防止演員之間的任何狀態共享;觀察另一個演員的狀態的唯一方法是向它發送一條消息。
- 位置透明度 – 係統從工廠構造Actors並返回對實例的引用。由於位置無關緊要,因此Actor實例可以啟動,停止,移動和重新啟動以便向上和向下縮放以及從意外故障中恢複。
- 輕量級 – 每個實例隻消耗幾百個字節,這實際上允許數百萬並發Actor存在於單個應用程序中。