频道栏目
首页 > 程序开发 > 软件开发 > 其他 > 正文
大数据系列修炼:Scala课程111
2016-10-25 09:22:00      个评论    来源:数据分析玩家  
收藏   我要投稿

核心内容:

1、Akka中的Actor中用become和unbecome动态切换receive的具体处理逻辑实战

1>Akka中的Actor在具体处理业务时有一个非常有用的特性,可以动态切换Actor的业务逻辑代码。
2>正常情况下,Actor中的receive方法会根据消息的具体类型进行业务的逻辑处理,然而我们可以根据Akka提供的become和unbecome机制来
动态的切换当前Actor的处理逻辑。
become的含义:将处理代码切换成自己所在的逻辑。
unbecome的含义:将执行的代码逻辑在切换一次。
3>self ! Spark 给自己所在的Actor发送消息 Context.stop(self)将自己所在的Actor停止。


实例程序1:

import akka.actor.{Actor, ActorSystem, Props}


case class Spark
case class Flink
class SparkFlinkActor extends  Actor
{
  import context._   //看来只有继承Actor才可以导入context 呵呵了
  //上面的导入是为了引入become和unbecome
  var count = 0  //参考之用
  override  def receive =
  {
      case Spark =>
      {
          println("Here is Spark!!!")
          count = count + 1  //scala已经不用++了,看来++果然不行啊
          Thread.sleep(100)
          self ! Flink  //给自己:SparkFlinkActor发送消息,一个Actor是可以给自己发送消息的
          become
          {
              case Flink =>
              {
                 println("Here is Flink!!")
                 count = count + 1
                 Thread.sleep(100)
                 self ! Spark
                 unbecome()  //动态的切换执行逻辑
              }
          }
          if(count > 10) context.stop(self)   //注意if的位置
      }
  }
}
object HelloAkka
{
  def main(args: Array[String]): Unit =
  {
     val system = ActorSystem.create("BecomeUnbecome")  //创建一个ActorSystem容器
     val sparkFlinkActor = system.actorOf(Props[SparkFlinkActor])   //创建一个子Actor
     //下面的消息中Spark竟然不用指明数据类型
     sparkFlinkActor ! Spark //主线程所在的Actor给下面的Actor发送消息
     Thread.sleep(2000)
     system.shutdown()
  }
}

上面的程序运行之后,还是抛出了之前出现过的异常,我将Jdk32位的换成了Jdk64位的,但是还是没有解决,无语啊!
如有问题,欢迎留言指正!

点击复制链接 与好友分享!回本站首页
上一篇:家谱管理系统
下一篇:TCP/IP详解:协议(TCP协议在应用层的应用)
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站