1

round-robin-poolを使用して akka ルーティングで resizer使用しようとしています。しかし、それはインスタンスを作成していません。下限で言及したインスタンスに取り組んでいます。akkaバージョン 2.5.3のドキュメントに従っています。

私の構成:

akka.actor.deployment {
/round-robin-resizer {
router = round-robin-pool
resizer {
  lower-bound = 4
  upper-bound = 30
  pressure-threshold = 0
  rampup-rate = 0.5
  messages-per-resize = 1
}

}

アクター クラス :

return receiveBuilder()
    .match(Integer.class, msg -> {
        System.out.println("Message :  " + msg + " Thread id : " + Thread.currentThread().getId());
        Thread.sleep(5000);
    })
    .matchAny(msg -> {
         System.out.println("Error Message :  " + msg + " Thread id : " + Thread.currentThread().getId());
    }).build();

}

アクターの作成:

ActorRef roundRobin = system.actorOf(FromConfig.getInstance().props(Props.create(RoutingActor.class)), "round-robin-resizer");
    for (int i = 0; i < 15; i++) {
        roundRobin.tell(i, ActorRef.noSender());
    }

出力:

Message : 2  Thread id : 18
Message : 1  Thread id : 16
Message : 0  Thread id : 15
Message : 3  Thread id : 17
Message : 7  Thread id : 17
Message : 4  Thread id : 15
Message : 6  Thread id : 18
Message : 5  Thread id : 16
Message : 11  Thread id : 17
Message : 9  Thread id : 16
Message : 10  Thread id : 18
Message : 8  Thread id : 15
Message : 13  Thread id : 16
Message : 14  Thread id : 18
Message : 12  Thread id : 15

4 つの結果ごとに、前のインスタンスのジョブを完了するために 5 秒間待機します。

スレッド IDを参照してください。アクター インスタンスを作成するたびに、スレッドをしばらくスリープさせます。その時点で、新しいインスタンスを別のスレッドに割り当てる必要があります。しかし、このプロセスは最初の 3 つのインスタンスまで実行されます。その後、リサイザーに従って新しいインスタンスを作成していません。ラウンド ロビン プールの通常の流れに従ってメッセージを追加します。

4

1 に答える 1