Akka中RoudnRobinGroup的简单示例

时间:2016-08-04 06:08:07

标签: scala akka

我找不到Akka中RoundRobingGroup的工作示例(文档中的示例无法帮助我)。我想在一个RoundRobinGroup中绑定两个actor并且只用Akka发送简单消息(通过路由器变量),但我总是在日志中收到deadletter。

 object Main extends App { 
      val system = ActorSystem()

      val paths = List("w1", "w2")
      val w1 = system.actorOf(Props[HelloActor], name = "w1")
      val w2 = system.actorOf(Props[HelloActor], name = "w2")
      val router = system.actorOf(new RoundRobinGroup(paths).props(), "shard")

      router ! "hello"
}

我想知道我的错误在哪里。

2 个答案:

答案 0 :(得分:0)

您可以做的是使用两个HelloActor和Routers实例创建一个路由器 并使用RoundRobinRoutingLogic作为路由逻辑。 您可以在此处获取详细信息:http://doc.akka.io/docs/akka/current/scala/routing.html

希望我解决了你的问题!

答案 1 :(得分:-1)

它解决了我的问题

   class Master extends Actor {    
          var router = {
            val routees = Vector.fill(2) {
              val mappings = context.actorOf(Props[HelloActor])
              context watch mappings
              ActorRefRoutee(mappings)
            }
            Router(RoundRobinRoutingLogic(), routees)
          }

          def receive = {
            case message: String =>
              router.route(message, sender())
            case Terminated(a) =>
              router = router.removeRoutee(a)
              val r = context.actorOf(Props[HelloActor])
              context watch r
              router = router.addRoutee(r)
          }
        }

        class HelloActor extends Actor {
          override def receive: Receive = {
            case "hello" => println("Another actor said hello")
            case _ => println("Unrecognized message")
          }
        }

        object Main extends App {
          val system = ActorSystem()
          val master = system.actorOf(Props[Master], name = "parent")
          master ! "hello"
        }