如何设置Akka actor根据谓词串行和并行处理消息?

时间:2014-12-28 21:34:28

标签: scala akka

如何基于偶数串行和并行处理这些消息?例如,当i为2,4,6,8时,并行处理消息。

我认为消息是按顺序处理的,但我如何区分并行处理它们呢?

for(i <- 1 to 100) {
  greeter ! WhoToGreet("message: " + i)
  inbox.send(greeter, Greet) 
  val Greeting(message) = inbox.receive(10.seconds)
  println(message)
}

我已将application.conf更改为如下:

akka {
  actor{
    default-dispatcher {
      type = Dispatcher
      executor = "thread-pool-executor"
      throughput = 100    
      fork-join-executor {
        parallelism-min = 2
        parallelism-factor = 2.0
        parallelism-max = 8
      }
    }
  }
}

但我不确定这是不是这样或使用par。

我有什么方法可以看到什么时候连续处理并且并行处理?

2 个答案:

答案 0 :(得分:1)

演员按顺序处理消息。这是模型的一部分。这可以确保您不必考虑共享状态和锁定等。 在我的拙见中,对于你想要做的事情,你应该使用一些特殊的角色来处理每种消息和/或为它做一些路由器演员。

http://doc.akka.io/docs/akka/snapshot/scala/routing.html

注意:在application.conf中没有任何关于它的信息。

答案 1 :(得分:1)

如果您需要并行处理的消息,则需要多个actor。正如@kaktusito所提到的,一种方法是使用Akka路由器。

您可以实验,并希望拥有多个要并行处理邮件的演员。例如,对于消息#4,最多只能有4个actor。但对于消息#32,您要么使用4或16或32个演员。机器的物理内核数量也将决定您应该并行运行的actor数量。