大数据系列修炼-Scala课程100

大数据系列修炼-Scala课程100

核心内容:
1、使用SBT开发Akka第一个案例源码解析消息、main入口、MasterActor

1、使用SBT开发Akka第一个案例源码解析消息、main入口、MasterActor

1>ActorSystem是整个Akka的监控容器体系。
2>mapActor ! message语法中消息的发送者是main方法所在的Actor,而mapActor是消息的接受者,main方法在运行的时候也是运行
在Actor之上的。
3>Scala语言具有很强的语言表现力。
4>Scala语言中的case 匹配机制功能类似于if条件表达式。

实例程序1:main程序入口

package akka.dt.app.scala.messages
import akka.actor.{ActorRef, ActorSystem, Props}
import akka.dt.app.scala.actors.MasterActor


object HelloAkka
{
  def main(args: Array[String]): Unit =
  {
      //在scala语言中,创建ActorSystem实际上有两种方式
      val system: ActorSystem =  ActorSystem.apply("HelloAkka")   //ActorSystem实际上是一个静态类
      val master: ActorRef =  system.actorOf(Props[MasterActor],"master")  //本行代码后续还要改动

      master ! "Scala and Hadoop"   //ActorSystem向masterActor发送消息
      master ! "Java and Spark"     //注意:master在这里实际上是消息的接受者
      master ! "Hbase and spark"    //!在这里实际上是一个函数

      Thread.sleep(2000)

      master ! new Result  //获取最终的消息

      Thread.sleep(2000)

      system.shutdown()

  }
}

实例程序2:MasterActor程序

package akka.dt.app.scala.actors

import akka.actor.{Actor, Props}
import akka.dt.app.scala.messages.Result



class MasterActor extends Actor //继承的Actor不同,实现的方法也不同
{
   val aggregateActor = context.actorOf(Props[AggregateActor],"aggregate")
   val reduceActor = context.actorOf(Props(new ReduceActor(aggregateActor)),name = "reduce")
   //因为我们的MapActor会将结果交给ReduceActor,所以形式参数是ReduceActor。
   val mapActor = context.actorOf(Props(new MapActor(reduceActor)),"map")

  //模式匹配在一定程度上功能相当于if
  override  def receive: Receive =  //在函数当中进行模式匹配对消息进行相应的处理
  {
    case message:String => mapActor ! message
    case message:Result => aggregateActor ! message
    case _ =>  //不对消息进行任何的处理
  }
}

如有问题,欢迎留言指正!

你可能感兴趣的:(scala,大数据)