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

第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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值