配置 Akka 路由器时出错

Error Configuring Akka Router

给定以下 2 个演员,DownloaderDownloadActor,后一个演员有一个 router,名为 Router

但是,当我运行 sbt run 时,出现以下运行时异常:

Caused by: akka.ConfigurationException: Configuration missing for router [akka://Downloader/user/DownloadActor/Router] in 'akka.actor.deployment' section.

这是我的代码:

Downloader.scala

object DownloadMain {

    val system = ActorSystem("Downloader")

    val actor = system.actorOf(Props[DownloadActor], "DownloadActor")

    def main(args: Array[String]) {
        actor ! new URL("http://www.cis.upenn.edu/~matuszek/index.html")
    }
}

DownloadActor.scala

class DownloadActor extends Actor with ActorLogging {

    val router = context.actorOf( Props[Worker].withRouter( FromConfig()), "Router")
    ...

application.conf

akka.actor.deployment {
    /Downloader/DownloadActor/Router {
        router = "round-robin" 
        nr-of-instances = 8
    }
}

请让我知道我犯了哪个配置错误。

我看到了这个 post,但解决方案似乎并不准确(至少对我而言)。

首先 Downloader 不是演员 - 这是演员系统名称,用于为特定演员系统创建唯一路径,例如。

[akka.tcp://Downloader@127.0.0.1:2561/user/DownloadActor/Router] 

为了回答您的问题,您的部署配置中的路径不正确,您应该使用以下配置。

akka.actor.deployment {
    /DownloadActor/Router {
        router = "round-robin" 
        nr-of-instances = 8
    }
}

所有 actor 直接从 system 初始化,如下例

val actor = system.actorOf(Props[DownloadActor], "DownloadActor")

是在 user 监护人下创建的,是该演员的 children。请阅读supervision and monitoring 文档以获取更多详细信息。