文章目录
  1. 1. AKKA介绍
  2. 2. AKKA的引用
  3. 3. AKAA的使用
    1. 3.1. 普通模式的调用
  4. 4. 未完待续。。。
  5. 5. 参考

这两天微软的分布式系统开发框架rDSN开源出来了,必须要Akka压压惊,当然在Spark中大量的使用了AKKA是主要原因^_^

AKKA介绍

Akka是一个基于JVM的用于构建高并发、分布式、弹性的消息驱动系统,它有以下5个特点:

  1. 并发和分布式
  2. 弹性设计
  3. 高性能
  4. 去中心化
  5. 高扩展性

可以基于AKKA构建高并发的web框架,也可以构建分布式系统(Spark

AKKA的引用

如果你是Maven用户,你可以这么添加依赖

1
2
3
4
5
<dependency>
<groupId>com.typesafe.akka</groupId>
<artifactId>akka-actor_2.10</artifactId>
<version>2.3.11</version>
</dependency>

如果你是SBT用户,你的build.sbt可以这么写

1
name := "My Project"
version := "1.0"
scalaVersion := "2.10.4"
libraryDependencies +=
  "com.typesafe.akka" %% "akka-actor" % "2.3.11"

它还提供了好多其他的其他用法,但是由于天朝连国外网速也是在是太慢了,我直接去http://akka.io/downloads/将压缩包给download下来,然后将已编译的jar添加到IDEA中,简单、粗暴、高效。

AKAA的使用

AKKA是基于ScalaActor来实现的,了解ScalaActor可以参考我之前的一篇文章我眼中的Scala-简洁不简单

AKKA中最重要的是ActorSystem,关于ActorSystem在Doc中有这么一句话:

Note: An ActorSystem is a heavyweight structure that will allocate 1…N Threads, so create one per logical application.

普通模式的调用

首先创建一个类GreetingActor添加以下代码

1
2
3
4
5
6
7
8
9
10
11
import akka.actor._

case class Greeting(who:String)
/**
* Created by yanyl on 6/3/15.
*/

class GreetingActor extends Actor with ActorLogging {
def receive={
case Greeting(who)=>log.info("hello"+who);
}
}

这样就建立了一个标准的Actor,用过receive方法不断地监听,

然后建立一个Test类向这个Actor发送消息

1
2
3
4
5
6
7
8
9
10
11
12
13
import akka.actor._;

/**
* Created by yanyl on 6/2/15.
*/

object Test {
def main(args:Array[String]): Unit ={
val system=ActorSystem("mySystem");
val greeter=system.actorOf(Props[GreetingActor],name="greeter");
greeter!Greeting("tom")
println("i am not tom")
}
}

叹号!表示发送非阻塞消息,执行之后你可以在控制台看到

i am not tom
[INFO] [06/05/2015 00:56:27.188] [mySystem-akka.actor.default-dispatcher-5] [akka://mySystem/user/greeter] hellotom

并可以发现这个程序并没有停止,这是因为Actor一直在监听。

未完待续。。。

参考

文章目录
  1. 1. AKKA介绍
  2. 2. AKKA的引用
  3. 3. AKAA的使用
    1. 3.1. 普通模式的调用
  4. 4. 未完待续。。。
  5. 5. 参考