如何在akka中通过ConsistentHashingPool向所有参与者广播相同的字符串消息

edqdpe6u  于 2022-11-06  发布在  其他
关注(0)|答案(1)|浏览(173)

我是新来的 akka 和坚持与这个问题。
我有四个演员,但不知何故,广播消息总是去一个演员
下面是一个示例代码

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

请帮帮忙

g2ieeal7

g2ieeal71#

在Classic Actors中,你可以使用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")
}

相关问题