4

我有一个名为ClusterSystem的 AKKA 集群系统。该集群的每个节点都有一个演员ActorA。我想要一种将发送给参与者的消息广播到集群中运行的所有ActoraA -s 的方法。

如果有人可以用 Java 发布一个示例,那将是非常有帮助的。

4

2 回答 2

7

查看分布式发布订阅扩展。它允许您为一个或多个参与者订阅一个主题,并从集群中的任何参与者向该主题发布消息。

订阅:

class Subscriber extends Actor with ActorLogging {
  import DistributedPubSubMediator.{ Subscribe, SubscribeAck }
  val mediator = DistributedPubSub(context.system).mediator
  // subscribe to the topic named "content"
  mediator ! Subscribe("content", self)

  def receive = {
    case s: String ⇒
      log.info("Got {}", s)
    case SubscribeAck(Subscribe("content", None, `self`)) ⇒
      log.info("subscribing");
  }
}

出版:

class Publisher extends Actor {
  import DistributedPubSubMediator.Publish
  // activate the extension
  val mediator = DistributedPubSub(context.system).mediator

  def receive = {
    case in: String ⇒
      val out = in.toUpperCase
      mediator ! Publish("content", out)
  }
}

此处的代码示例和附加说明。

于 2015-11-23T19:25:47.723 回答
2

此任务有一种特殊类型的消息。您可以向路由器发送Broadcast消息,所有路由都将收到该消息。

router.tell(new Broadcast("Watch out for Davy Jones' locker"), getTestActor());

您还可以创建一个BroadcastPoolBroadcastGroup以防您需要广播每条消息。

您可以在此链接中找到有关这两个选项的更多信息。

于 2015-06-12T15:13:59.570 回答