Akka Singleton - 不接受消息

Nic*_*ick 5 akka akka-cluster

是我愚蠢 - 我没有将索引器道具传递到系统创建中。我会在这里留下答案,以防有人从中受益*

我正在创建一个单身人士并发送这样的消息:

 val indexerProps = ClusterSingletonManager.props(had => Props(
            classOf[SingleCoreIndexer], dataProvider, publisher, name), name, End, None)

        val coreIndexer = system.actorOf(indexerProps, name)
        //val coreIndexer = system.actorOf(Props(classOf[SingleCoreIndexer], dataProvider, publisher, name))

        coreIndexer ! "start_indexing"
Run Code Online (Sandbox Code Playgroud)

注释掉的行显示了工作正常的非单例道具

当我运行应用程序时,我收到以下错误:

[WARN] [06/21/2013 11:55:32.443] [deadcoreindexerstest-akka.actor.default-dispatcher-5] [akka://deadcoreindexerstest/user/node1] unhandled event start_indexing in state Start
Run Code Online (Sandbox Code Playgroud)

所有其他功能都停止工作,这与暗示“coreIndexer”actor 未收到“start_indexing”消息的消息相关

更多代码:

class Indexer(systemCreator: SystemCreator, publisherProps: Props, dataProviderProps: Props, name: String) {

    def start {
        val system = systemCreator.create
        val dataProvider = system.actorOf(dataProviderProps)
        val publisher = system.actorOf(publisherProps)

        val indexerProps = ClusterSingletonManager.props(
            singletonProps = had => Props(classOf[SingleCoreIndexer], dataProvider, publisher, name),
            singletonName = "aaa",
            terminationMessage = End,
            role = None
            )

        val coreIndexer = system.actorOf(Props(classOf[SingleCoreIndexer], dataProvider, publisher, name))
        coreIndexer ! "start_indexing"
    }
}



class SingleCoreIndexer(dataProvider: ActorRef, publisher: ActorRef, name: String) extends Actor {

    def receive = {

        case "start_indexing" => {
            println("Single core indexer starting indexing")
            dataProvider ! new NextBatchOfDataPlease
        }

        case BatchOfData(data) => {
            publisher ! (name, data)
            self ! "next_batch"
        }

        case "next_batch" => {
            dataProvider ! new NextBatchOfDataPlease
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

看起来我正在向经理而不是单身人士发送消息。但是,当我向单身人士发送消息时,没有任何反应:

class Indexer(systemCreator: SystemCreator, publisherProps: Props, dataProviderProps: Props, name: String) {

    def start {
        val system = systemCreator.create
        val dataProvider = system.actorOf(dataProviderProps)
        val publisher = system.actorOf(publisherProps)

        val indexerProps = ClusterSingletonManager.props(
            singletonProps = had => Props(classOf[SingleCoreIndexer], dataProvider, publisher, name),
            singletonName = "singlecoreindexer",
            terminationMessage = End,
            role = None
            )

        system.actorOf(Props(classOf[SingleCoreIndexer], dataProvider, publisher, name))
        val coreIndexer = system.actorSelection(s"/user/$name/singlecoreindexer")
        coreIndexer ! "start_indexing"
    }
}
Run Code Online (Sandbox Code Playgroud)