Akka简而言之

时间:2013-07-21 12:50:48

标签: scala akka actor

我正在试图弄清楚如何在Scala中使用Akka。我做对了吗,我需要做的不是这个:

class Class1 {
  def someMethod1 = {
    //.... some operations....
    "someStringData"
  }

  def someMethod2(param1: Int, param2: Double, param3: BigInt) = {
    //.... some operations....
    new someClass
  }
}

//.............................
object Application extends App {
  val c = new Class1
  val stringData = c.someMethod1
  val someClass = c.someMethod2
} 

我必须这样做:

case object SomeMethod
case class SomeClass(a: Int, b: Double, c: BigInt)
case class SomeReturnClass(d: Boolean)

class Class1 extends Actor{
  def receive = {
    case SomeMethod => {
      //.... some operation....
      sender ! "someStringData"
    }

    case SomeClass(a, b, c) => {
     //...some operations....
     val result: Boolean = ..... // some operations.... 
     sender ! new SomeReturnClass(result)
    }
  }
}

//.............................

object Application extends App {
  val system = ActorSystem("HelloSystem")
  val helloActor = system.actorOf(Props[Class1], name = "helloactor")
  val stringData: String = helloActor ! someMethod1
  val someClass: SomeReturnClass = helloActor ! someMethod2
}

1 个答案:

答案 0 :(得分:3)

你已经掌握了基本的想法,唯一的错误在于你如何尝试获得演员的答案:为此请看看ask pattern。从某种意义上说,演员就像“活跃的对象”,但不是每个对象都应该被翻译成演员;在实现actor时使用普通对象组合并不罕见。