我正在为分布式服务层评估 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/