0

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

请帮忙

4

1 回答 1

0

在 Classic Actors 中,您可以使用Broadcast向路由器中的所有 Actors 发送消息,包括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")
}
于 2020-04-21T20:09:41.150 回答