如何开发一个简单的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等),则进行评估要容易得多。

这里采用简单的方法,并从lightbend quickstart下载应用程序。

经过一些调整后,maven文件将如下所示,请注意,我们将使用lombok。

<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应用程序将通过监护人终止。与往常一样,您可以在github上找到源代码。

以上是 如何开发一个简单的Akka Java应用 的全部内容, 来源链接: utcz.com/z/311689.html

回到顶部