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协议。

Akka边学边写(1)-- Hello, World!的更多相关文章

  1. Akka边学边写(2)-- Echo Server

    EchoServer 上篇文章里,我们用Akka写了一个简单的HelloWorld样例,对Akka(以及Actor模式)有了初步的认识.本文将用Akka写一个EchoServer,看看在Actor的世 ...

  2. Akka边学边写(4)-- MiniRPG

    前面几篇文章用Akka写了HelloWorld和EchoServer,为了更进一步学习Akka,本文将会实现一个非常小的RPG游戏server:MiniRPG. 游戏逻辑 由于是迷你RPG,所以逻辑非 ...

  3. Akka边学边写(3)-- ByteString介绍

    Akka的IO层设计能够參考这篇文档,本文简介一下ByteString的设计. Immutable消息 Actor之间是通过消息沟通的.但为了避免同步问题,消息必须是Immutable. 因此.Akk ...

  4. Django学习笔记(现学现写,实时更新)

    说明:我是先上手做一些简单的例子,然后在尝试的过程中理解Django的原理,笔记也是按这个思路来的. 一.Django结构与基本文件介绍 1. django-admin.py 工程管理工具,主要用于创 ...

  5. [HTML] 学HTML写的第一第二个网页

    ①第一个网页 <h2>英雄联盟(电子竞技类游戏)</h2> <p><b>(英雄联盟)</b>(简称lol)是由美国<i>Roit ...

  6. JavaScript中的作用域和作用域链(边学边写)[看着别人的博客纯手敲]

    作用域是JavaScript最重要的概念之一,想要学好JavaScript就需要理解JavaScript作用域和作用域的工作原理.今天这篇文章对JavaScript作用域和作用域链简单的介绍,希望能帮 ...

  7. 苦涩的技术我该怎么学?Akka 实战

    上次我们在“懵 B”的状态下,聊了聊 Actor 模型的理论知识.稍微再补充两句,如上图所示在 Actor 模型系统中,主要有互不依赖的 Actor 组成(图中圆圈),Actor 之间的通信是通过消息 ...

  8. 关于自己写C++的一点风格

    现在,我学了很长时间的C++,但是自己就是无法精通.许多知识是入门书上没有的.现在写C++最重要的就是风格问题. 我现在的C++风格: 把自己所有的东西都放在一个名称空间下. 没有全局的函数,有的函数 ...

  9. 我也要学iOS逆向工程--函数

    大家好,这篇我开始学习函数了.先学 C 函数,然后再 OC 的吧.OC 应该复杂点的吧. 然后看看汇编情况哦! 学习函数呢,肯定要弄清楚几个事情. 1.跳转地址. 2.返回地址 3.参数 4.函数获取 ...

随机推荐

  1. js 第四章 cookie的操作

    js 第四章 cookie的操作 一.学习要点 掌握cookie的简单应用 二. js 第四章 cookie的操作 了解cookie 什么是cookie? cookie 是存储于访问者的计算机中的变量 ...

  2. 使用RxPermissions(基于RxJava2)

    使用RxPermissions(基于RxJava2) 0. 背景 Android 6.0 (API level 23)中.将权限分成了两类.一类是Install权限(称之为安装时权限).还有一类是Ru ...

  3. Bluetooth---初步了解Android 蓝牙4.0

    http://developer.android.com/reference/android/bluetooth/package-summary.html android.bluttooth 提供管理 ...

  4. RMAN之一:快速入门 分类: H2_ORACLE 2014-02-17 16:11 689人阅读 评论(0) 收藏

    1.数据导出基础 (1)创建datapump导出文件的目录对象并为相应用户授予权限. 出于安全考虑,不允许oracle用户直接在OS上进行文件的操作,而应通过directory对象指定. SQL> ...

  5. XML输出到浏览器报错

    在使用Firefox浏览器测试我编写的xml文件时,遇到如下错误:我的xml源代码如下: <?xml version="1.0" encoding="UTF-8&q ...

  6. MRTG Monitoring with ESXi Hosted Guest Return ‘interface is commented * has no ifSpeed property’

    MRTG Monitoring with ESXi Hosted Guest Return ‘interface is commented * has no ifSpeed property’ Rec ...

  7. [Javascript] Format console.log with CSS and String Template Tags

    The Chrome console allows you to format messages using CSS properties. This lesson walks you through ...

  8. SQLServer重建索引

    Use [数据库名称]Go DECLARE @DBCCString NVARCHAR(1000)DECLARE @TableName VARCHAR(100)DECLARE Cur_Index CUR ...

  9. AlphaImageLoader用法

    在 IE6 中,能够非常方便地利用 img 的 src 属性,实现本地图片预览,然而在 IE7 中,这样的办法却行不通.须要用 AlphaImageLoader. AlphaImageLoader 说 ...

  10. Erlang中的record与宏

    http://www.cnblogs.com/me-sa/archive/2011/07/20/erlang0006.html 在Erlang中使用Tuple ,数据项的顺序\数量都是确定的,一旦数据 ...