在Akka中调用粒度方法

时间:2016-11-11 05:48:44

标签: scala akka

假设我需要从一个演员客户端调用Akka actor中的三个方法:

class MyActor extends Actor {
  def receive = {
    case req1: Request1 => sender ! method1()
    case req2: Request2 => sender ! method2()
    case req3: Request3 => sender ! method3()
  }
}

我需要以不同的组合调用这些方法,例如:

方法1,方法2

方法3

方法1,方法2,方法3

我可以在客户端中使用以下方法来调用method1

def invokeMethod1 () {
      val system = ActorSystem("system")
      implicit val timeout = Timeout(120 seconds)
      val actor = system.actorOf(Props[MyActor], name = "myactor")
      val future = actor ? Request1
      val result = Await.result(future, timeout.duration)
}

在不同组合中调用方法的最佳策略是什么?我应该有invokeMethod1invokeMethod2invokeMethod3(注意每个人都初始化了演员系统)?或者我应该在演员本身中合并方法,例如method1and2?还有其他首选方式吗?

1 个答案:

答案 0 :(得分:-1)

我建议用于for循环,

  def invokeMetod1:Future[Int] = ???
  def invokeMetod2:Future[Int] = ???
  def invokeMetod3:Future[Int] = ???
  val a =
    for{
      _1 <- invokeMetod1
      _3 <- invokeMetod3
      _2 <- invokeMetod2
    }yield
      _1 + _2 + _3

它可以顺序执行(invokeMetod1然后invokeMetod3然后invokeMetod2)