trait DDDDatabaseHelper {
def props():Props
}
object ObjectDatabaseHelper extends DDDDatabaseHelper{
def props(): Props = Props(new ObjectDatabaseHelper())
}
class ObjectDatabaseHelper extends Actor with DatabaseHelper{
def receive = {
case _ => "OK"
}
}
object ObjectRoute {
def props[T:ClassTag](t:T,t1:DDDDatabaseHelper): Props = Props(new ObjectRoute(t,t1))
}
class ObjectRoute[T:ClassTag](t:T,t1:DDDDatabaseHelper) extends Actor{
implicit val timeout = Timeout(5 seconds)
val accountDatabaseActor = context.actorOf(t1.props(), s"${t.getClass.getName}Actor")
def receive = {
case t@OperationMessage(operation, account: Company) if operation == Create || operation == Modify || operation == Delete =>
sender ! account.copy(name = accountDatabaseActor.path.name)
case _ => SSOException(-1, "Unknown Error")
}
}
object Main extends App{
import scala.concurrent.duration._
implicit val timeout: Timeout = 5.seconds
implicit val system = ActorSystem("SSOSprayRoot")
val companyRoute = system.actorOf(ObjectRoute.props(Company,ObjectDatabaseHelper), name = "sprayActor")
val companyBean=new Company(
1,
"1111111111",
"1111111111",
"1111111111",
"1111111111",
"1111111111",
"1111111111",
"1111111111",
1,
"1111111111",
"1111111111",
"1111111111",
"1111111111",
"1111111111",
InitState,
"1111111111",
"1111111111"
)
val t =companyRoute ? OperationMessage(Create, companyBean)
t.onSuccess{
case SSOException(err, str) => println(err + "\t" + str)
case other: Company => println("back Company\t" + other.name)
case otherwise => println("unknown")
}
}终于可以把原来十几个相同的Actor替换掉了.
本文介绍了一种使用单一Actor来替换原有多个相同Actor的方法,通过具体的代码示例展示了如何实现这一过程,并确保了Actor之间的通信及操作的有效执行。
330

被折叠的 条评论
为什么被折叠?



