我正在评估Akka的分布式服务层,下面的例子打印Hello {n} 10次,但是一个接一个地打印.根据我的理解,这是一个Akka演员的故意,所以我从哪里开始使其并发?
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")
}
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试过从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
Run Code Online (Sandbox Code Playgroud)
作为旁注,您应该避免Thread.sleep在演员的receive方法中阻塞(即)。
| 归档时间: |
|
| 查看次数: |
2443 次 |
| 最近记录: |