ブロードキャストルータにルートを追加/削除するには、Akka/Scalaの便利な方法をご存知でしょうか?ルータのアクタに経路を動的に追加/削除する
私はResizerを見ていましたが、私のニーズを満たしていませんでした(私はresizerに経路を追加するよう明示的に要求する方法は見当たりませんし、それを取り除くにはPoison Pillをその後除去される)。
これまでのところ、
私のビジネスケース ....私はActorRefのリストを持つルータを持っていると私はAddRouteeとRemoveRouteeメッセージを送信:私はプロキシ経由(ネットワークからデータを取得する俳優を持っています)、このデータを独立したアクターにディスパッチして並列処理する必要があります。受信者(DAG)のグラフの性質上、グラフは実行時に進化し、頂点/辺が変更されるため、ルートを追加したり削除したりする必要があります。
これを行うにはもっとクリーンな方法が必要です。
ありがとうございます。
私はアッカが処理したいコードの例:
はclass MDActor extends Actor {
@volatile var routees = Set[ActorRef]()
def receive = {
case ar: AddRoutee => routees = routees + ar.actorRef
case rr: RemoveRoutee => routees = routees - rr.actorRef
case msg => routees.foreach(r => r forward msg)
}
}
コードからルータへのルートの追加/削除を行う状況を少し詳しく説明できますか?そのような情報は、ソリューションの開発に役立ちます。 – cmbaxter
あなたの例では、ルートの重複を防ぐためにList [ActorRef]の代わりにSet [ActorRef]を使用することをお勧めします。そして、 "!"の代わりに "forward"を使用してください。元の送信者を保存します。 –
ありがとうございます。これは素晴らしい考えです。 – jts