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存在于单个应用程序中。