如何在Akka调度程序中使用自定义执行器(executor)

5
我正在尝试为Akka的调度程序使用自定义执行器。具体来说,我想用自己的(日志记录、调试等)包装现有的执行器。我已经查看了文档的相关部分:
默认调度程序可以进行配置,并且默认情况下是一个带有“fork-join-executor”的调度程序,在大多数情况下提供出色的性能。
并且可以指定使用“executor”使用“fork-join-executor”,“thread-pool-executor”或akka.dispatcher.ExecutorServiceConfigurator的FQCN。
(我不明白FQCN是什么。)
我该怎么做?

2
FQCN代表完全限定类名,即包含其所在包的完整类名,例如scala.collection.mutable.Map - wingedsubmariner
1个回答

5

FQCN指全限定类名,即包名和类名的组合,例如:

java.lang.String <- String的FQCN

以下是一个用于内置ThreadPoolExecutor的ExecutorServiceConfigurator示例:

class ThreadPoolExecutorConfigurator(config: Config, prerequisites: DispatcherPrerequisites) extends ExecutorServiceConfigurator(config, prerequisites) {

  val threadPoolConfig: ThreadPoolConfig = createThreadPoolConfigBuilder(config, prerequisites).config

  protected def createThreadPoolConfigBuilder(config: Config, prerequisites: DispatcherPrerequisites): ThreadPoolConfigBuilder = {
    import akka.util.Helpers.ConfigOps
    ThreadPoolConfigBuilder(ThreadPoolConfig())
      .setKeepAliveTime(config.getMillisDuration("keep-alive-time"))
      .setAllowCoreThreadTimeout(config getBoolean "allow-core-timeout")
      .setCorePoolSizeFromFactor(config getInt "core-pool-size-min", config getDouble "core-pool-size-factor", config getInt "core-pool-size-max")
      .setMaxPoolSizeFromFactor(config getInt "max-pool-size-min", config getDouble "max-pool-size-factor", config getInt "max-pool-size-max")
      .configure(
        Some(config getInt "task-queue-size") flatMap {
          case size if size > 0Some(config getString "task-queue-type") map {
              case "array"ThreadPoolConfig.arrayBlockingQueue(size, false) //TODO config fairness?
              case "" | "linked"ThreadPoolConfig.linkedBlockingQueue(size)
              case x             ⇒ throw new IllegalArgumentException("[%s] is not a valid task-queue-type [array|linked]!" format x)
            } map { qf ⇒ (q: ThreadPoolConfigBuilder) ⇒ q.setQueueFactory(qf) }
          case _ ⇒ None
        })
  }

  def createExecutorServiceFactory(id: String, threadFactory: ThreadFactory): ExecutorServiceFactory =
    threadPoolConfig.createExecutorServiceFactory(id, threadFactory)
}

来源: https://github.com/akka/akka/blob/v2.3.4/akka-actor/src/main/scala/akka/dispatch/AbstractDispatcher.scala#L344

这段内容是关于it技术方面的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接