Akka笔记(一)

Actors

Actors Model对分布式并发系统提供了一个高层次的抽象。它让我们不需要关注线程,锁等深奥而又易错的语法,让我们更容易的写出正确的分布式的系统。Actors是由Carl Hewitt在1973年定义的,并在Erlang语言中得到了广泛的应用,并在爱立信公司创建了高并发,可靠的系统。

Akka的Actors和Scala的Actors非常相似,都是从Erlang中借鉴了很多。

 

第一个例子

class First extends Actor {
    val log = Logging(context.system,this)
    def receive = {
        case "test" =>  log.info("hello,test")
        case _ => log.info("other")
    }

}

object First extends App
{
    val system = ActorSystem("first")
    val f = system.actorOf(Props[First],"f");
    f ! "test"
    system.shutdown
}

 

Akka实现Receive函数,必须穷尽所有消息,否则akka.actor.UnhandledMessage(message, sender, recipient)

 将发送至ActorSystem‘s EventStream???

 

第二个例子

class Second extends Actor{
    val first =  context.actorOf(Props[First],"f2");
    val log = Logging(context.system,this)
    def receive = {
        case "test" =>  log.info("hello,test")
        case _ => log.info("other")
    }
}

 Actor是一个树层结构,system创建的Actor为顶层Actor,Actor里头只能用context进行创建,创建的对象为这个Actor的子Actor。父Actor负责子Actor创建,发送消息,关闭等。

 

Actor生命周期


Actor有四个回调函数:

 

def preStart() {}
def preRestart(reason: Throwable, message: Option[Any]) {
  context.children foreach (context.stop(_))
postStop() }
def postRestart(reason: Throwable) { preStart() }
def postStop() {}
1. Actor在初始化的时候,调用preStart这个函数是初始化工作处理的最佳阶段。

 

2.重启,当Actor在处理消息时,抛出异常,这时候会调用重启过程。

  • 旧的Actor的preRestart将会被掉用,默认实现关闭掉所有的子Actor,调用postStop()
  • 新的Actor被创建,postReStart将首先被调用,同时默认的初始化调用preStart
3.stop方法postop将会被调用。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值