Использование диспетчера Akka для обработки фьючерсов

У меня есть HTTP-сервис на основе спрея. У меня есть поток, который работает внутри этого приложения HTTP. Теперь, когда этот поток выполняет много операций ввода-вывода, я решил использовать отдельный пул потоков. Я посмотрел документацию Akka, чтобы увидеть, что я могу сделать, чтобы мой пул потоков был настраиваемым. Я наткнулся на концепцию диспетчера в Акке. Поэтому я попытался использовать его, как показано ниже в моем application.conf:

akka {
  io-dispatcher {
    # Dispatcher is the name of the event-based dispatcher
    type = Dispatcher
    # What kind of ExecutionService to use
    executor = "fork-join-executor"
    # Configuration for the fork join pool
    fork-join-executor {
      # Min number of threads to cap factor-based parallelism number to
      parallelism-min = 2
      # Parallelism (threads) ... ceil(available processors * factor)
      parallelism-factor = 2.0
      # Max number of threads to cap factor-based parallelism number to
      parallelism-max = 10
    }
    # Throughput defines the maximum number of messages to be
    # processed per actor before the thread jumps to the next actor.
    # Set to 1 for as fair as possible.
    throughput = 20
  }
}

В моем актере я попытался найти эту конфигурацию как:

context.system.dispatchers.lookup("akka.io-dispatcher")

Когда я запускаю свой сервис, я получаю следующую ошибку:

[ERROR] [05/03/2016 12:59:08.673] [my-app-akka.actor.default-dispatcher-2] [akka://my-app/user/myAppSupervisorActor] Dispatcher [akka.io-dispatcher] not configured
akka.ConfigurationException: Dispatcher [akka.io-dispatcher] not configured
    at akka.dispatch.Dispatchers.lookupConfigurator(Dispatchers.scala:99)
    at akka.dispatch.Dispatchers.lookup(Dispatchers.scala:81)

Мои вопросы:

  1. Этот пул потоков io-dispatcher, который я создаю, предназначен для использования только для Actor? Мое намерение состояло в том, чтобы использовать этот пул потоков для моих потоков, который создается одним из актеров. Затем я передаю этот пул потоков в мой поток.

  2. Как я могу создать ExecutionContext, просто загрузив диспетчер из application.conf? Должен ли я использовать какую-либо конкретную библиотеку, которая считала бы мою конфигурацию для пула потоков и дала бы мне ExecutionContext?

1 ответ

Решение

Конфигурация правильная. Все, что вам нужно сделать, это передать загруженный файл конфигурации в систему Akka ActorSystem, например:

ActorSystem("yourActorSystem", ConfigFactory.load())
Другие вопросы по тегам