如何在akka中通过ConsistentHashingPool向所有角色广播相同的字符串消息。

问题描述 投票:0回答:1

我是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"))

请帮忙

scala akka akka-remote-actor akka-remoting
1个回答
0
投票

在经典演员中,你可以使用 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")
}
© www.soinside.com 2019 - 2024. All rights reserved.