您的位置:首页 > 其它

scala基于事件抽象

2016-04-22 00:00 363 查看
import UserStorage._
import akka.actor.{Props, ActorSystem, Stash, Actor}

import scala.sys.Prop

/**
* Created by zzg on 16-4-22.
*/
case class User2(userName:String,email:String)
object UserStorage{
trait DBOperation
object DBOperation{
case object Create extends DBOperation
case object Update extends DBOperation
case object Read extends DBOperation
case object Delete extends DBOperation
}
case object Connect
case object Disconnect
case class Operation (dBOperation: DBOperation,user2:Option[User2])
}
class UserStorage extends Actor with Stash {
def receive = disconnected
def connected :Actor.Receive = {
case Disconnect =>
println("User Storage Disconnect from DB")
//重新设置
context.unbecome()
case Operation(op,user) =>
println(s"User Storage receive ${op} to do in user:${user}")
}
def disconnected : Actor.Receive = {
case Connect =>
println(s"User Storage connect to DB")
unstashAll()
//动态切换receive
context.become(connected)
case _ =>
stash()
}
}
object BecomeHotswap extends App{
import UserStorage._
val system = ActorSystem("beconHostwap")
val userStorage = system.actorOf(Props[UserStorage],"userStorage")
userStorage ! Operation(DBOperation.Create,Some(User2("Admin", "admin@packt.com")))
userStorage ! Connect
userStorage ! Disconnect
Thread.sleep(100)
system.shutdown()
}

将事件抽象为对象:DBOperation,通过case基于事件判断不同的事务规则

用context.become,unbecome动态热插拔actor很有用处
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: