在Actor模式中我们使用IActorRef通过ActorSystem来发送消息数据。这么做有两个理由
1.ActorSystem会在消息中封装一些元数据(metadata),这些数据我们可以通过上下文来获取。
2.我们可以让实例Actor位置透明,也就是说我们针对的某个Actor只是一个逻辑Actor,可以在本地也可能在远程。系统为我们做了许多封装,跟踪工作。在分布式环境下这是不可或缺的。
那我们如何获取IActorRef接口呢?
既然我们依仗ActorSystem那么接口也是通过System实例来获得。特别需要注意的是,所以的Actor实例都应该通过ActorSystem或者Context来构建,否则就失去了使用该框架的意义,也会混淆系统的使用。另外在构建时最好给出Actor的Name可以方便之后的引用。
IActorRef myFirstActor = MyActorSystem.ActorOf(Props.Create(() => new MyActorClass()), "myFirstActor")
那什么是Props呢?
Props是一个配置类,使用其中的参数就可以构建对应的Actor。我想是不是可以理解成一个工厂类,用来生成对应的对象。不过也是需要通过ActorSystem来进行的。在Remote和Cluster中Props是构建Actor不可或缺的组件。
还有一点需要注意的是也不应使用new来构建Prop,而要使用Prop提供的Create接口。