bugfix> akka > 投稿

プレイ中のアクティブな俳優の数を制御することは可能ですか?一言で言えば、 AuthoriseVisaPaymentActor というアクターがいますメッセージ VisaPaymentMessage を処理します 。 10個のメッセージを送信する並列ループがありますが、3人のアクターが同時に動作できるようにするものを作成しようとしています。他の7つのメッセージはブロックされ、アクターが利用可能になるのを待っています。これは可能ですか?私は現在 RoundRobin を使用しています誤解したと思うセットアップ

           var actor = sys.ActorOf(
                Props.Create<AuthoriseVisaPaymentActor>().WithRouter(new RoundRobinPool(1)));
            actor.Tell(new VisaPaymentMessage(curr.ToString(), 9.99M, "4444"));

回答 1 件
  • ラウンドロビンプール/グループを設定するには、使用するアクターパスを指定する必要があります。これは、ホーコン設定で静的に行うことも、コードで動的に行うこともできます(以下を参照)。メッセージがブロックされている限り、Akkaのメールボックスは既にそれを行っています。現在処理中のメッセージが処理されるまで、新しいメッセージは処理されません。アクターが処理できるようになるまで、それらをキューに保持します。

    // Setup the three actors
    var actor1 = sys.ActorOf(Props.Create<AuthoriseVisaPaymentActor>());
    var actor2 = sys.ActorOf(Props.Create<AuthoriseVisaPaymentActor>());
    var actor3 = sys.ActorOf(Props.Create<AuthoriseVisaPaymentActor>());
    // Get their paths
    var routees = new[] { actor1.Path.ToString(), actor2.Path.ToString(), actor3.Path.ToString() };
    // Create a new actor with a router
    var router = sys.ActorOf(Props.Empty.WithRouter(new RoundRobinGroup(routees)));
    router.Tell(new VisaPaymentMessage(curr.ToString(), 9.99M, "4444"));
    
    

あなたの答え