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很有用处
相关文章推荐
- 关于Python的Object继承
- Xcode中buildSetting参数设置与学习
- php session跨页面值丢失问题
- Android 观察者模式
- MapReduce实现WordCount, 及其优化
- CentOS中安装MySQL
- tomcat中reloadable作用
- java.lang.OutOfMemoryError: PermGen space
- Spring mvc 上下文初始化过程
- uva 10791 Minimum Sum LCM
- Linux文件属性之软硬链接
- Android Sdk获取更新
- 20150120--商品分页+商品管理(删除,还原)
- Android Sdk获取更新
- android分析windowManager、window、viewGroup之间关系(一)
- 宅福利-Tumblr视频图片
- 宅福利-Tumblr视频图片
- OSChina 周五乱弹 ——胸大有毛用,又不给我摸……
- 2016年4月21日渗透学习总结
- Android SDK Manager 更新代理配置