Akka使用入门

一、Akka简单介绍

Akka基于Actor模型,提供了一个用于构建可扩展的(Scalable)、弹性的(Resilient)、快速响应的(Responsive)应用程序的平台。

Actor是Akka中最核心的概念,它是一个封装了状态和行为的对象,Actor之间可以通过交换消息的方式进行通信,每个Actor都有自己的收件箱(Mailbox)。
通过Actor能够简化锁及线程管理,可以非常容易地开发出正确地并发程序和并行系统,Actor具有如下特性:
+ 提供了一种高级抽象,能够简化在并发(Concurrency)/并行(Parallelism)应用场景下的编程开发
+ 提供了异步非阻塞的、高性能的事件驱动编程模型
+ 超级轻量级事件处理(每GB堆内存几百万Actor)

二、Akka简单使用

1. 从创建一个scala项目说起

  1. 在D盘新建一个项目目录,比如说叫AkkaDemo。
  2. 进入AkkaDemo目录,新建一个build.gradle文件,并在文件中输入一下内容:
apply plugin: 'idea'
apply plugin: 'scala'

task "createDirs" << {
    sourceSets*.scala.srcDirs*.each { it.mkdirs() }
    sourceSets*.resources.srcDirs*.each { it.mkdirs() }
}

repositories{
    mavenCentral()
    mavenLocal()
}

dependencies{
    compile "org.scala-lang:scala-library:2.10.4"
    compile "org.scala-lang:scala-compiler:2.10.4"
    compile "org.scala-lang:scala-reflect:2.10.4"
    compile "com.typesafe.akka:akka-actor_2.11:2.4.4"
    testCompile "junit:junit:4.11"
}

task run(type: JavaExec, dependsOn: classes) {
    main = 'Main'
    classpath sourceSets.main.runtimeClasspath
    classpath configurations.runtime
}
  1. 执行gradle cDirs命令,创建起项目骨架。
  2. 使用Idea导入gradle项目。File”->”Import Project”选择打开build.gradle即可。

2. 第一个Akka应用

使用Akka框架进行应用开发,基本上遵循以下步骤即可:
1. 编写一个Actor类,继承特质akka.actor.Actor,同时可以编入一些其他的特质,如ActorLogging,用于记录日志。
2. 实现Actor的receive方法,receive方法中定义一系列的case语句,基于标准Scala的模式匹配方法,来实现每一种消息的处理逻辑。
3. 编写程序入口,在入口程序中,创建一个顶层的ActorSystem。
4. 创建一个actor,可以使用ActorSystem或context的ActorOf方法创建,也可以使用context.actorSelection方法通过actor的名称从上下文中查找。
5. 向actor发送消息, ! 代表发送。

a. 定义一个Actor
  • 定义一个Actor类,继承Actor,编入ActorLogging特质(相当于实现一个接口)
  • 重写Actor类的Receive方法,用于接收消息。
  • 使用scala的模式匹配功能,根据不同消息做不同逻辑处理
class HelloActor extends Actor with ActorLogging{
   
  override def receive: Receive = {
    case "hello" => log.info("hello => 你好!")
    case msg if "world"==msg => log.info(s"$msg => 世界")
    case "quit"|"stop" => log.info("我要停机了!");context stop(self)
  }
}
b. 客户端调用,向actor发送消息

以下为程序入口,其中actor为HelloActor实例的一个引用,通过!向actor发送消息;通过terminate方法关闭HelloService。

※※注意!※※
- ActorRef 类型的对象是不可变的,并且是可序列化的,可以在网络中进行传输,作为远程对象使用,具体的操作还是在本地Actor中进行。
- ActorRe

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值