Akka Props用法示例详解

本文概述

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
微信公众号
手机浏览(小程序)
0
分享到:
没有账号? 忘记密码?