akka的actor可以实现spark的常驻

package sparkcontext_actor

import akka.actor.{ActorSystem, Props}
//akka的actor可以实现spark的常驻
import scala.io.StdIn
/*
创建actorsystem一个实例,然后由实例创建一个子actor--> as.actorof 返回的是一个actor的代理 actorref,
由actorref与actor交互
 */
object Student extends App{

/*1.创建ActorSystem
//ActorSystem作为顶级Actor,可以创建和停止Actors,甚至可关闭整个Actor环境,
//此外Actors是按层次划分的,ActorSystem就好比Java中的Object对象,Scala中的Any,
//是所有Actors的根,当你通过ActorSystem的actof方法创建Actor时,实际就是在ActorSystem
下创建了一个子Actor*/
  val as = ActorSystem.apply()


  //通过ActorSystem创建TeacherActor的代理(ActorRef),即通这个actorsystem创建子actor角色
  //           def actorOf(props: Props): ActorRef
  val myActor = as.actorOf(Props(new MyActor(new Teacher("lc"))))
  //ActorSystem通过actorOf创建Actor,但其并不返回TeacherActor而是返回一个类型为ActorRef的东西,
  //ActorRef作为Actor的代理,使得客户端并不直接与Actor对话,这种Actor
  //模型也是为了避免TeacherActor的自定义/私有方法或变量被直接访问,所
  //以你最好将消息发送给ActorRef,由它去传递给目标Actor



  // 发送QuoteRequest消息到代理中.你只需通过!方法将QuoteReques消息发送给ActorRef(注意:ActorRef也有个tell方法,其作用就委托回调给!)
  while (true){
    val line = StdIn.readLine()
    myActor ! line
  }
}

=======================================

package sparkcontext_actor

import akka.actor.Actor


//这里继承actor必须要实现一个方法 receive方法,,,
class MyActor (teacher:Teacher) extends Actor{
  private var _teacher:Teacher = _

  override def receive: Receive = {
    case x:String => _teacher.answerQuestion(x)
    case _ => println("你的提问老师不能理解!")
  }

  override def preStart(): Unit = {//将传进来的参数初始化.
    _teacher = teacher
  }

  override def postStop(): Unit = {

  }
}

===============================

package sparkcontext_actor

class Teacher(name:String) {

  var _name:String = name


  def answerQuestion(question:String): Unit ={
    println(_name+"老师回答了问题:" + question)
  }

}
发布了124 篇原创文章 · 获赞 0 · 访问量 7872

猜你喜欢

转载自blog.csdn.net/weixin_43680708/article/details/89923873