4

ClusterSystemという名前の AKKA クラスター システムがあります。このクラスターの各ノードには、アクターActorAがあります。アクターに送信されたメッセージを、クラスター内で実行されているすべてのActoraAにブロードキャストする方法が必要です。

誰かがJavaで例を投稿できれば、非常に役立ちます。

4

2 に答える 2

7

Distributed Publish Subscribe拡張機能を確認してください。1 つ以上のアクターをトピックにサブスクライブし、クラスター内の任意のアクターからこのトピックにメッセージを発行できます。

購読:

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 に答える