我是Akka的新手,被这个问题所困扰。
我有4个演员,但不知何故,广播信息总是发送给一个演员。
下面是一个示例代码
def hashMapping: ConsistentHashMapping = {
case ReduceNameTitlePair(name,title) => {
//println(s"\n *** Using ${name} as the key")
name
}
}
var actorReduceRouter = context.actorOf(RemoteRouterConfig(ConsistentHashingPool(numReducers,hashMapping = hashMapping), addresses).props(Props(classOf[ReduceActor])))
actorReduceRouter ! Broadcast("SEND ME YOUR DATA"))
请帮忙
在经典演员中,你可以使用 Broadcast
向路由器中的所有角色发送消息,包括 ConsistentHashingRouter
. 当我运行下面的代码时,我在三个演员上都收到了消息。
你上面似乎使用了广播,所以我怀疑你的远程配置。但是由于你没有在这里发布任何关于你的远程设置的信息,所以我也没有什么办法来解决这个问题。我建议使用集群感知路由器而不是手动遥控,但我不知道这是否与你的问题有任何关系。
import akka.actor.{Actor, ActorLogging, ActorSystem, Props}
import akka.routing.{Broadcast, ConsistentHashingPool}
import akka.routing.ConsistentHashingRouter.ConsistentHashMapping
object Worker {
def props(): Props = Props(new Worker())
}
class Worker extends Actor with ActorLogging {
def receive = {
case s: String => log.info(s"${self.path.name} : $s")
}
}
object AkkaQuickstart extends App {
val system = ActorSystem("UntypedRouter")
def hashHapping: ConsistentHashMapping = {
case s: String => s
}
val router = system.actorOf(
ConsistentHashingPool(3, hashMapping = hashHapping).props(Worker.props())
)
router ! Broadcast("hello")
}