Akka:如何使用 Scala 向加入路由器的参与者广播消息
Akka: How to broadcast messages to actors joined in a router using scala
在我的应用程序中,我想每 2 秒向 Worker 的所有 actors 实例广播一个时间单位。时间单位由master发给所有worker。
我正在尝试通过主要演员向所有工人发送广播消息,但它对我不起作用。我在这里附上我的测试代码。
行存在编译错误
router ! Broadcast("any message")
"Error: value is not a member of `akka.routing.Router`.
即使我将路由器定义为 akka.routing.Router 变量,谁能告诉我这里的问题是什么。另外,如何每 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)
}
}
您可以使用
router.route(msg, sender())
一定有用!看看
在我的应用程序中,我想每 2 秒向 Worker 的所有 actors 实例广播一个时间单位。时间单位由master发给所有worker。
我正在尝试通过主要演员向所有工人发送广播消息,但它对我不起作用。我在这里附上我的测试代码。
router ! Broadcast("any message")
"Error: value is not a member of `akka.routing.Router`.
即使我将路由器定义为 akka.routing.Router 变量,谁能告诉我这里的问题是什么。另外,如何每 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)
}
}
您可以使用
router.route(msg, sender())
一定有用!看看