代码之家  ›  专栏  ›  技术社区  ›  Manar

Akka:如何使用scala向加入路由器的演员广播消息

  •  1
  • Manar  · 技术社区  · 9 年前

    在我的应用程序中,我希望每2秒向Worker的所有参与者实例广播一个时间单位。时间单位由主机发送给所有工人。
    我正试图通过主演向所有工作人员发送广播消息,但这对我不起作用。我在这里附上了我的测试代码。行中存在编译错误

    router ! Broadcast("any message") 
    "Error: value is not a member of `akka.routing.Router`.  
    

    有人能告诉我这里有什么问题吗?即使我将路由器定义为akka.routing。路由器变量。另外,如何每2秒广播一次time_unit消息? 通过路由器向本地参与者广播消息符合逻辑吗?
    我可以用我在应用程序中定义的不同类型向每个参与者广播消息,而不指定其类型,甚至不加入特定的路由器吗。

    import akka.actor._
    import akka.routing.{ ActorRefRoutee, RoundRobinRoutingLogic, Router }
    import akka.routing.Broadcast
    import akka.routing.RouterActor
    
    object Messages{
     object Work
     object Terminated
     object Time_Unit
    }
    
    object MainRouterDriver extends App {
      import Messages._
    
      val system = ActorSystem("HelloSystem")
      val routingMaster = system.actorOf(Props[Master], name = "helloactor")
      routingMaster ! Work
    
    }
    
    class Worker extends Actor{
      def receive = {
        case _ =>
            println("Hi I am a Worker")
      }
    }
    
    class Master extends Actor {
      import Messages._
      var router = {
        val routees = Vector.fill(5) {
          val r = context.actorOf(Props[Worker])
          context watch r
          ActorRefRoutee(r)
        }
        akka.routing.Router(RoundRobinRoutingLogic(), routees)
      }
      def receive = {
        case Work =>
                router ! Broadcast(Time_Unit) 
    
      }
        }
    
    1 回复  |  直到 9 年前
        1
  •  2
  •   Community CDub    8 年前

    您可以使用

    router.route(msg, sender())
    

    它一定管用。!看一看 here