您的位置:首页 > 大数据 > 人工智能

第100讲:使用SBT开发Akka第一个案例源码解析消息、main入口、MasterActor学习笔记

2015-09-13 18:18 627 查看
第100讲:使用SBT开发Akka第一个案例源码解析消息、main入口、MasterActor学习笔记

本讲主要对Akka第一个案例源码的消息、main入口、MasterActor的scala代码进行解析。

下图是HelloAkkaWithSBT案例的文件结构:



下面是消息的scala代码解析:

package akka.dt.app.messages

import java.util.{hashMap,ArrayList}

class Word(val word:String,val count:Integer)

//对每个单词进行计数,是交给MapActor使用的。对每个单词实例每出现一次就计数为1,

ccase class result //不含任何内容,只是想给AggregateActor发消息说想要结果。

class MapData(val dataList:SrrayList[Word]) //对传进的字符串进行单词切分,切分后的每一个单词都有单词本身和出现次数,

//MapData是MapActor产生的结果,会发消息给ReduceActor,

class ReduceData(val reduceDataMap:HashMap[String,Integer])

//一个单词在当前字符串中出现的总次数,即local Reduce.数据交给AggregateActor进行全局统计。

下面是MasterActor的scala代码解析:

package akka.first.app.scala.actors

import …

class MasterActor extends Actor{

val aggregateActor:ActorRef = context.actorOf(Props[AggregateActor],name=”aggregate”)

//创建具体的aggregateActor,

val reduceActor:ActorRef = context.actorOf(Props(new ReduceActor(aggregateActor)),name=”reduce”)

val mapActor:ActorRef = context.actorOf(Props(new MapActor(reduceActor)),name=”map”)

//创建reduceActor,mapActor,并传入参数aggregateActor和reduceActor,

// 是因为ReduceActor的结果要交给aggregateActor,mapActor的结果要交给reduceActor。

def receive:Receive = {

case message:String =>

mapActor ! message

case message:Result =>

aggregateActor ! message

case _ =>

//MasterActor收到信息后进行类型匹配,如果收到的是String,就交给maspActor,

// 如果收到的是Result类型的消息,就交给aggregateActor

}

}

下面是main方法的scala代码解析:

object MapReduceApplication{

def main(args:Array[String]): Unit ={

val _system = ActorSystem(“HelloAkka”) //通过ActorSystem创建Actor的监控体系。

val master = _system.actorOf(Props[MasterActor],name = “master”)

//创建第一个actor:masterActor

master ! "Hi! My name is Rocky. I'm so so so happy to be here. "
//def !(message:Any)(implicit sender: ActorRef = null): Unit  sender是指消息的发送者
//这里的sender是main方法所在的actor(main方法也是运行在actor上的)
master ! "Today, I'm going to read a news artical for you."
master ! "I hope you'll like it. "

Thread.sleep(500)    //睡眠是因为要确保真正拿到结果,因为处理需要时间。这里并不是严格的方式。
master ! new Result

Thread.sleep(500)
_system.shutdown
//业务流程与java完全一样,只是比java简洁了很多。
//scala具有很强的语言表现力。


}

}

以上内容是从王家林老师DT大数据课程第100讲的学习笔记。

DT大数据微信公众账号:DT_Spark

王家林老师QQ:1740415547

王家林老师微信号:18610086859

DT大数据梦工厂1至101集scala的所有视频、PPT和代码在百度云盘的链接:http://pan.baidu.com/share/home?uk=4013289088#category/type=0&qq-pf-to=pcqq.group

第100讲视频网站地址:

土豆 http://www.tudou.com/programs/view/kaIPqLWnCGI/

优酷 http://v.youku.com/v_show/id_XMTMzMTc0MzEyNA==.html

17173视频 http://17173.tv.sohu.com/v_play/v_102_608/MjgxNzIzMTE.html

51CTO http://edu.51cto.com/lesson/id-75132.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: