• Akka边学边写(1)-- Hello, World!


    Akka

    Akka是什么呢?直接引用Akka站点上面的描写叙述吧:

    Akka is a toolkit and runtime for building highly concurrent, distributed, and fault tolerant event-driven applications on the JVM.

    反正我认为Akka是比較难上手的,并且文档对于新手来说,也不太友好。本文会用Akka写一个Hello World程序,从这个程序入手,介绍Akka的一些基本概念。

    hello-world-java8项目

    Akka同一时候提供了Java版和Scala版,本文的HelloWorld项目将使用Java版。该项目是我用NetBeans创建的Gradle项目,而且放到了Github上面。由于是HelloWorld项目,所以非常easy,仅仅有两个类,例如以下图所看到的:

    build.gradle

    先介绍一下build脚本:

    假设脚本看起来比較吃力,能够先看看我写的“看懂Gradle脚本”系列文章。前面没什么好解释的,可是依赖部分我认为有必要说明一下。我们的HelloWorld项目仅仅依赖了两个库,各自是scalaactor。Akka主要是用Scala语言写的,所以须要依赖Scala。而Akka本身很的模块化,HelloWorld项目仅仅用到了Actor模块,所以声明了对Actor的依赖。注意Akka的模块名包括了Scala版本:akka-actor-_2.11,所以2.3.6才是actor模块的真正版本。

    MyActor

    Akka的核心就是Actor模型,所以我们的HelloWorld自然要定义一个Actor:

    MyActor继承自UntypedActor(与之相应的是TypedActor,但我们还没有足够的知识来讨论两者的差别),UntypedActor是个抽象类,我们必须实现onReceive()方法。

    信箱

    在Actor的世界里,Actor们是通过消息相互沟通的。每一个Actor都有一个信箱Mailbox),能够接收消息,然后一个个处理。但这些细节Akka都帮我们处理好了,我们的Actor要做的,就是实现onReceive()方法,然后每次处理一条消息。如上面的代码所看到的,MyActor处理消息的方式是:把它打印到控制台。

    Main

    HelloWorld的第二个类是Main,也就是程序主类,例如以下所看到的:


    ActorSystem

    从概念上讲,n个相互协作的Actor组成一个系统,Akka提供了ActorSystem类来抽象Actor系统:


    main()方法的第一行代码创建了一个Actor系统,并起名为mySystem:

    ActorSystem mySystem = ActorSystem.create("mySystem");

    ActorRef

    整个Actor系统是非常封闭的,Actor们从来不直接和外界接触,它们把这样的危急的事情交给自己的“经纪人”ActorRef去做。main()方法的第二行代码调用ActorSystem的actorOf()方法创建了一个名为myActor的Actor:

    ActorRef myActor = mySystem.actorOf(Props.create(MyActor.class), "myActor");
    到眼下为止,我们的Actor系统仅仅有一个Actor,例如以下图所看到的:

    发消息,关闭Actor系统

    main()方法的第三行代码通过ActorRef的tell()方法给myActor发了一个消息:

    myActor.tell("Hello, World!", ActorRef.noSender());
    tell()方法是异步的,它仅仅给Actor的邮箱放一封邮件,然后就返回了。tell()方法的第一个參数是消息,第二个參数是发送者,这样,接收者Actor就知道是谁给自己发的消息了。MyActor并不关心消息是谁发送的,所以我们给它传了ActorRef.noSender()。main()方法的第四行代码调用ActorSystem的shutdown()方法,通知Actor系统终止自己:

    mySystem.shutdown();
    这就是所有的代码,执行程序,能够看到控制台里打印出了我们期待已久的Hello, World!

    结论

    本文用Akka创建了一个HelloWorld项目,介绍了Akka的一些基本概念。下篇文章将用Akka创建一个EchoServer,介绍一下怎样用Akka处理TCP协议。

  • 相关阅读:
    547. Friend Circles
    399. Evaluate Division
    684. Redundant Connection
    327. Count of Range Sum
    LeetCode 130 被围绕的区域
    LeetCode 696 计数二进制子串
    LeetCode 116 填充每个节点的下一个右侧节点
    LeetCode 101 对称二叉树
    LeetCode 111 二叉树最小深度
    LeetCode 59 螺旋矩阵II
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/4500941.html
Copyright © 2020-2023  润新知