scala - 使用 Akka Hello World 示例的简单并发

标签 scala akka

我正在为分布式服务层评估 Akka,以下示例打印 Hello {n} 10 次,但一个接一个地打印。据我了解,这对于 Akka Actor 来说是有意的,那么我该从哪里开始让它并发呢?

import akka.actor._

object HelloActor {
  case class SayHello(message: String)
}

class HelloActor extends Actor {
  def receive = {
    case HelloActor.SayHello(message) =>
      Thread.sleep(1000)
      println(message)
  }
}

object Main extends App {
  val system = ActorSystem("ActorSystem")

  val hello = system.actorOf(Props[HelloActor])

  for (i <- 1 to 10) {
    hello ! HelloActor.SayHello(s"Hello $i")
  }
}

我已经尝试从 Main 类中创建多个 Actor ,但不知何故感觉不对,我不应该只调用 Actor 然后它自己处理并发/产生更多 Actor 吗?任何人都可以提供一个例子(最好修改上面的代码)。我一直在阅读和阅读,但感觉需要立即接受很多东西,我觉得我只是在这里某处遗漏了一个关键概念。

最佳答案

对于您的用例,您可能希望使用 Routers .

例如:

val hello = system.actorOf(Props[HelloActor].withRouter(
  RoundRobinRouter(nrOfInstances = 10)))

hello ! HelloActor.SayHello("Hello!")   // Sends to one of the 10

作为旁注,您应该避免在您的 Actor 的 Thread.sleep 中阻塞(即 receive )方法。

关于scala - 使用 Akka Hello World 示例的简单并发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20291340/

相关文章:

scala - Spark - scala - 如何检查配置单元中是否存在表

java - Flink JobExecutionException : akka. client.timeout

actor - 关于Akka库和基于参与者的并发模型的好书

scala 扩展特征,方法返回各种类型,类型不匹配

scala - 使用 slick 创建 TableView

scala - 如何使用 akka 连接到 Unix 套接字?

scala - Akka 2.1 异常处理(Scala)

java - 2.1.1 中的 Akka 库中不存在 IndirectActorProducer 类

scala - 如果我有一个 Actor 应该有很大的吞吐量怎么办?

scala - Scala 选项类型上的“tee”操作?