0

私のアプリケーションでは、サブスクリプションメッセージをアクターに送信する必要があります。アクターはルーターである場合とそうでない場合があります。それらがルーターの場合、メッセージはすべてのルートに送信される必要があります。アクターはルーターではない可能性があり、アクター受信ブロック内のメッセージBroadcastを処理したくないため、ここでは適用されません。Broadcastまた、ルーターはどのタイプでもかまいませんので、カスタムルーターを作成したくありません。だから私がやりたいのは次のようなものです:

system.actorOf(Props[MyActor].withRouter(FromConfig().withRoute { routeeProvider => {
  case (sender, Subscribe) => routeeProvider.routees.map(Destination(sender, _))
}}))

これを行う方法、またはこのような特別なルーティング動作を追加する他の方法はありますか?

4

3 に答える 3

2

すべてのアクターの親抽象クラスを定義して、必要なすべての特別なメッセージを処理し、そこからすべての非ルーターアクターを継承できます。このようなもの:

abstract class MyActor extends Actor {

  protected def receiveMsg: Receive // will substitute "receive" in your actors

  def receive = receiveMsg orElse {

    case Broadcast(msg) => self ! msg

    ...

  }

}
于 2013-03-25T14:41:43.193 に答える
1

通常のアクターを作成し、ルート/アクターをダイヤルインおよび/または子として作成し、必要に応じて受信メッセージを転送するだけです。

于 2013-03-26T16:51:57.257 に答える
0

ルーターにBroadcastRouterを使用できます。メッセージがブロードキャストメッセージである場合にのみブロードキャストする他のルーターとは異なり、このルーターはすべてのメッセージをその子にブロードキャストします。

于 2013-03-26T10:01:43.310 に答える