调度器

依赖

调度器(Dispatchers)是核心 Akka 的一部分,这意味着它们是akka-actor-typed依赖的一部分:

  1. <!-- Maven -->
  2. <dependency>
  3. <groupId>com.typesafe.akka</groupId>
  4. <artifactId>akka-actor-typed_2.12</artifactId>
  5. <version>2.5.23</version>
  6. </dependency>
  7. <!-- Gradle -->
  8. dependencies {
  9. compile group: 'com.typesafe.akka', name: 'akka-actor-typed_2.12', version: '2.5.23'
  10. }
  11. <!-- sbt -->
  12. libraryDependencies += "com.typesafe.akka" %% "akka-actor-typed" % "2.5.23"

简介

Akka 的MessageDispatcher是Akka Actor tick的原因,可以说,它是机器的引擎。所有MessageDispatcher实现也是一个执行器,这意味着它们可以用于执行任意代码,例如「Futures」。

选择调度器

当不指定自定义调度器的时候,默认调度器用于生成所有 Actor。这适用于所有不阻塞的 Actor。阻塞 Actor 需要小心管理,「这里」有更多的细节。

要选择调度器,请使用DispatcherSelector创建用于生成 Actor 的Props实例:

  1. context.spawn(yourBehavior, "DefaultDispatcher");
  2. context.spawn(
  3. yourBehavior, "ExplicitDefaultDispatcher", DispatcherSelector.defaultDispatcher());
  4. context.spawn(yourBehavior, "BlockingDispatcher", DispatcherSelector.blocking());
  5. context.spawn(
  6. yourBehavior,
  7. "DispatcherFromConfig",
  8. DispatcherSelector.fromConfig("your-dispatcher"));

DispatcherSelector有两种方便的方法来查找默认的调度器和自定义调度器,你可以使用它来执行阻塞的 Actor,例如不支持CompletionStages的遗留数据库 API。

最后一个示例演示如何从配置中加载自定义调度器,并在application.conf中对此进行答复:

  1. your-dispatcher {
  2. type = Dispatcher
  3. executor = "thread-pool-executor"
  4. thread-pool-executor {
  5. fixed-pool-size = 32
  6. }
  7. throughput = 1
  8. }

有关如何配置自定义调度器的完整详细信息,请参阅「非类型化文档」。


英文原文链接Dispatchers.