本文概述
Props是一个配置类, 用于在创建角色时指定选项。它是不可变的, 因此是线程安全的和可共享的。
你可以通过导入akka.actor.Props包来实现Props。
你可以通过将Props实例传递到ActorSystem和ActorContext中可用的actorOf()工厂方法来创建actor。 actorOf()方法返回ActorRef的实例。该实例是不可变的, 并且与它所代表的演员具有一对一的关系。 ActorRef也可序列化, 因此你可以对其进行序列化。
在下面的示例中, 我们将使用Props创建一个Actor。
Akka Actor示例:使用Props
import akka.actor.Actor;
import akka.actor.ActorSystem;
import akka.actor.Props;
class PropsExample extends Actor {
def receive= {
case msg:String => println(msg+" "+self.path.name)
}
}
object PropsMain{
def main(args:Array[String]){
var actorSystem = ActorSystem("ActorSystem");
var actor = actorSystem.actorOf(Props[PropsExample], "PropExample");
actor ! "Hello from"
}
}
输出
Hello from PropExample
还有多种其他方式来实现Props。让我们来看一个例子。
Akka Actor示例2:使用Props
import akka.actor._
class CreatingActor extends Actor{
def receive = {
case msg:String => println(msg+" "+self.path.name) // Receiving message and name of actor
}
}
object CreatingActorExample{
def main(args:Array[String]){
var actorSystem = ActorSystem("ActorSystem");
var props1 = Props[CreatingActor]; // creating pops here
var actor1 = actorSystem.actorOf(props1); // passing pops reference
var actor2 = actorSystem.actorOf(Props[CreatingActor], "Actor2") // Passing pops and explicitly giving name to the actor
var actor3 = actorSystem.actorOf(Props(classOf[CreatingActor]), "Actor3") // Passing actor class by using classOf
var actor4 = actorSystem.actorOf(Props[CreatingActor], name = "Actor4") // Name passing to variable
var actor5 = actorSystem.actorOf(Props(new CreatingActor()), name = "Actor5") // This approach is not recommended
actor1 ! "Hello"
actor2 ! "Hello"
actor3 ! "Hello"
actor4 ! "Hello"
actor5 ! "Hello"
}
}
如果没有明确给出名称, 它将自动生成。
输出
Hello $a // Reference of the name of actor
Hello Actor2
Hello Actor4
Hello Actor3
Hello Actor5