欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

如何开发一个简单的Akka Java应用

程序员文章站 2022-07-02 13:58:15
akka是一个免费的开源工具包和运行时,用于在jvm上构建高度并发,分布式和弹性消息驱动的应用程序。除akka之外,您还具有akka-streams模块,该模块使流的提取和处理变得容易,alpakka...

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应用 的资料请关注其它相关文章!

相关标签: akka 应用 Java