Akka - Фиксированный пул потоков для операций блокировки - Blocking Dispatcher - PullRequest
0 голосов
/ 12 июля 2019

Я настроил диспетчер для операций блокировки, которые будет выполнять мое приложение, как показано ниже:

engine {
  blocking-io-dispatcher {
     type = Dispatcher
     executor = "thread-pool-executor"
     thread-pool-executor {
       fixed-pool-size = 3
     }
       throughput = 1
  }
}

Однако в журналах видно, что каждые 5 секунд более 3 потоков обрабатывают запросы (потоки 6,16,5,7,15)

Выход на консоль:

Система-engine.blocking-IO-диспетчерская-6
Система-engine.blocking-ю-диспетчерская-16
Система-engine.blocking-ю-диспетчерская-5
Система-engine.blocking-ю-диспетчерская-7
Система-engine.blocking-ю-диспетчерская-15

Пожалуйста, найдите код ниже:

import akka.actor.Actor
import akka.actor.ActorSystem
import akka.actor.Props
import java.util.Date
import akka.routing.RoundRobinRouter
import akka.routing.DefaultResizer

class SendPushNotificationActor extends Actor {
   def receive = {
      case SendPushNotificationMessage(message) => {
      println(Thread.currentThread().getName)
      // Simulate blocking operation which takes 5 seconds to send the push notification message
      Thread.sleep(5000)
    }
  }
}

object SendPushNotificationTest {

  def main(args: Array[String]): Unit = {
    val system = ActorSystem("system")

    val sendPushNotificationActor = system.actorOf(Props[SendPushNotificationActor].withDispatcher("engine.blocking-io-dispatcher")
  .withRouter(RoundRobinRouter(nrOfInstances = 5)))

    for (i <- 1.to(100)) {
      sendPushNotificationActor ! SendPushNotificationMessage("Push Notification Message")
    }
  }
}

case class SendPushNotificationMessage(message: String)

Буду признателен за любую помощь, чтобы узнать, как исправить бассейн.

...