Я ворвался в источники akka и понял, что он использует так называемый класс BusLogging
который публикует сообщения EventStream
. EventStream::publish(event: Event)
по очереди просто публикует событие получателям, находящимся в cache: Map.empty[Classifier, Set[Subscriber]]
.
Я обнаружил, что ведение журнала выполняется актером /system/log1-Slf4jLogger
. В документации говорится:
Актер обработчика событий не имеет ограниченного входящего и запускается на диспетчере по умолчанию. Это означает, что запись больших объемов данных может сильно повлиять на ваше приложение. Это может быть несколько смягчено, если вы хотите использовать бэкэнд асинхронного ведения журнала.
Есть ли способ переместить его в другой диспетчер, который я настраиваю так, как я хочу?
Вы можете настроить его, добавив эти параметры в файл application.conf
:
akka.loggers-dispatcher = "my-blocking-dispatcher"
my-blocking-dispatcher {
type = Dispatcher
executor = "thread-pool-executor"
thread-pool-executor {
fixed-pool-size = 4
}
throughput = 1
}
Ссылка на конфигурацию Akka: http://doc.akka.io/docs/akka/2.5/scala/dispatchers.html http://doc.akka.io/docs/akka/2.5.4/scala/general/configuration.html # конфиг-Акка-пульт