如何开发一个简单的Akka Java应用
akka是一个免费的开源工具包和运行时,用于在jvm上构建高度并发,分布式和弹性消息驱动的应用程序。除akka之外,您还具有akka-streams模块,该模块使流的提取和处理变得容易,alpakka是基于reactive streams和akka的java和scala的reactive enterprise integration库。这里重点介绍如何使用java创建akka项目并将其打包。
您已经知道akka是基于scala构建的,因此为什么要使用java而不是scala?选择java有多种原因。
- akka是在jvm上运行的工具包,因此您无需精通scala即可使用它。
- 您可能已经有一个精通java的团队,但没有scala的团队。
- 如果您已经具有基于java的代码库和各种构建工具(maven等),则进行评估要容易得多。
这里采用简单的方法,并从下载应用程序。
经过一些调整后,maven文件将如下所示,请注意,我们将使用。
<project> <modelversion>4.0.0</modelversion> <groupid>com.gkatzioura</groupid> <artifactid>akka-java-app</artifactid> <version>1.0</version> <properties> <akka.version>2.6.10</akka.version> </properties> <dependencies> <dependency> <groupid>com.typesafe.akka</groupid> <artifactid>akka-actor-typed_2.13</artifactid> <version>${akka.version}</version> </dependency> <dependency> <groupid>ch.qos.logback</groupid> <artifactid>logback-classic</artifactid> <version>1.2.3</version> </dependency> <dependency> <groupid>org.projectlombok</groupid> <artifactid>lombok</artifactid> <version>1.18.16</version> <scope>provided</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupid>org.apache.maven.plugins</groupid> <artifactid>maven-compiler-plugin</artifactid> <version>3.8.0</version> <configuration> <source>11</source> <target>11</target> </configuration> </plugin> <plugin> <groupid>org.codehaus.mojo</groupid> <artifactid>exec-maven-plugin</artifactid> <version>1.6.0</version> <configuration> <executable>java</executable> <arguments> <argument>-classpath</argument> <classpath /> <argument>com.gkatzioura.application</argument> </arguments> </configuration> </plugin> </plugins> </build> </project>
现在有一个actor负责管理您的其他actor。这是称为“守卫acotr”的*actor。它与actorsystem一起创建,并且当它停止时,actorsystem也将停止。
为了创建一个actor,您定义该actor将会收到的消息,并指定它会对这些消息响应什么。
package com.gkatzioura; import akka.actor.typed.behavior; import akka.actor.typed.javadsl.abstractbehavior; import akka.actor.typed.javadsl.actorcontext; import akka.actor.typed.javadsl.behaviors; import akka.actor.typed.javadsl.receive; import lombok.allargsconstructor; import lombok.getter; public class appguardian extends abstractbehavior<appguardian.guardianmessage> { public interface guardianmessage {} static behavior<guardianmessage> create() { return behaviors.setup(appguardian::new); } @getter @allargsconstructor public static class messagetoguardian implements guardianmessage { private string message; } private appguardian(actorcontext<guardianmessage> context) { super(context); } @override public receive<guardianmessage> createreceive() { return newreceivebuilder().onmessage(messagetoguardian.class, this::receivemessage).build(); } private behavior<guardianmessage> receivemessage(messagetoguardian messagetoguardian) { getcontext().getlog().info("message received: {}",messagetoguardian.getmessage()); return this; } }
akka是消息驱动的,因此这个“守卫acotr”接受到发送给它的消息。这样,那些实现guardianmessage接口的消息将在这里receivemessage()方法中处理。
当这个actor被创建时,createreceive方法用于指示如何处理接到的消息,这里是委托给receivemessage()方法。
请注意,在进行日志记录时,不要在类中使用记录器,而应使用getcontext().getlog()
在幕后,日志消息将自动添加actor的路径作为akkasource映射诊断上下文(mdc)值。
最后一步是添加main类。
package com.gkatzioura; import java.io.ioexception; import akka.actor.typed.actorsystem; import lombok.extern.slf4j.slf4j; @slf4j public class application { public static final string app_name = "akka-java-app"; public static void main(string[] args) { final actorsystem<appguardian.guardianmessage> appguardian = actorsystem.create(appguardian.create(), app_name); appguardian.tell(new appguardian.messagetoguardian("first akka java app")); try { system.out.println(">>> press enter to exit <<<"); system.in.read(); } catch (ioexception ignored) { } finally { appguardian.terminate(); } } }
这里希望实现的效果是:让我们的“守卫acotr”打印提交的消息。按下enter键,akka应用程序将通过监护人终止。与往常一样,您可以在上找到源代码。
以上就是如何开发一个简单的akka java应用 的详细内容,更多关于akka java应用 的资料请关注其它相关文章!
上一篇: WPF文字间距
推荐阅读
-
jquery编程开发中如何实现一个简单好用的弹出框
-
如何开发一个简单的Akka Java应用
-
应用界面开发时如何创建一个实用的信息面板?这款工具也许能帮到你! devexpressc#界面开发UI
-
利用 Docker 构建一个简单的 java 开发编译环境
-
详解如何使用node.js的开发框架express创建一个web应用
-
如何用 PyQt5 快速构建一个简单的 GUI 应用
-
应用界面开发时如何创建一个实用的信息面板?这款工具也许能帮到你! devexpressc#界面开发UI
-
如何开发一个 PHP 的 Docker 化应用(二)
-
Java如何调用外部接口?以一个简单的POST接口调用为例
-
用java做一个简单的FTP连接管理模块(ftp软件开发一)