我正在评估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/