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

 更新时间:2020年10月29日 11:47:10   作者:banq  
这篇文章主要介绍了如何开发一个简单的Akka Java应用 ,帮助大家使用Java创建Akka项目并将其打包,感兴趣的朋友可以了解下

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应用 的详细内容,更多关于Akka Java应用 的资料请关注脚本之家其它相关文章!

相关文章

  • 详解Java中常见语法糖的使用

    详解Java中常见语法糖的使用

    语法糖(Syntactic Sugar),也称糖衣语法,是由英国计算机学家 Peter.J.Landin 发明的一个术语,指在计算机语言中添加的某种语法,本文主要为大家分享了12个java中常见的语法糖,感兴趣的小伙伴可以了解下
    2023-11-11
  • spring无法引入注解及import org.springframework.web.bind.annotation.*报错的解决

    spring无法引入注解及import org.springframework.web.bind.annota

    本文主要介绍了spring无法引入注解及import org.springframework.web.bind.annotation.*报错的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • spring6+JDK17实现SSM起步配置文件

    spring6+JDK17实现SSM起步配置文件

    本文介绍了使用Spring6和JDK17配置SSM(Spring + Spring MVC + MyBatis)框架,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-01-01
  • 用Java实现24点游戏

    用Java实现24点游戏

    喜欢玩游戏的有福啦,文中有非常详细的开发框架,按着框架来实现就好啦.而且24点游戏是经典的纸牌益智游戏.,需要的朋友可以参考下
    2021-05-05
  • 关于Spring的AnnotationAwareAspectJAutoProxyCreator类解析

    关于Spring的AnnotationAwareAspectJAutoProxyCreator类解析

    这篇文章主要介绍了关于Spring的AnnotationAwareAspectJAutoProxyCreator类解析,Spring是一个开源免费的框架 , 容器,是一个轻量级的框架 ,需要的朋友可以参考下
    2023-05-05
  • 手写redis@Cacheable注解 支持过期时间设置方式

    手写redis@Cacheable注解 支持过期时间设置方式

    这篇文章主要介绍了手写redis@Cacheable注解 支持过期时间设置方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • java 8如何自定义收集器(collector)详解

    java 8如何自定义收集器(collector)详解

    这篇文章主要给大家介绍了关于java 8如何自定义收集器(collector)的相关资料,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-06-06
  • java实现异步线程,回调接口方式

    java实现异步线程,回调接口方式

    这篇文章主要介绍了java实现异步线程,回调接口方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • Springboot中@Async异步,实现异步结果合并统一返回方式

    Springboot中@Async异步,实现异步结果合并统一返回方式

    这篇文章主要介绍了Springboot中@Async异步,实现异步结果合并统一返回方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • SpringBoot项目POM文件的使用小结

    SpringBoot项目POM文件的使用小结

    本文主要详细介绍了Maven中SpringBoot项目的POM文件配置,包括项目的依赖和插件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-11-11

最新评论