调度器
依赖
调度器(Dispatchers
)是核心 Akka 的一部分,这意味着它们是akka-actor-typed
依赖的一部分:
<!-- Maven -->
<dependency>
<groupId>com.typesafe.akka</groupId>
<artifactId>akka-actor-typed_2.12</artifactId>
<version>2.5.23</version>
</dependency>
<!-- Gradle -->
dependencies {
compile group: 'com.typesafe.akka', name: 'akka-actor-typed_2.12', version: '2.5.23'
}
<!-- sbt -->
libraryDependencies += "com.typesafe.akka" %% "akka-actor-typed" % "2.5.23"
简介
Akka 的MessageDispatcher
是Akka Actor tick
的原因,可以说,它是机器的引擎。所有MessageDispatcher
实现也是一个执行器,这意味着它们可以用于执行任意代码,例如「Futures」。
选择调度器
当不指定自定义调度器的时候,默认调度器用于生成所有 Actor。这适用于所有不阻塞的 Actor。阻塞 Actor 需要小心管理,「这里」有更多的细节。
要选择调度器,请使用DispatcherSelector
创建用于生成 Actor 的Props
实例:
context.spawn(yourBehavior, "DefaultDispatcher");
context.spawn(
yourBehavior, "ExplicitDefaultDispatcher", DispatcherSelector.defaultDispatcher());
context.spawn(yourBehavior, "BlockingDispatcher", DispatcherSelector.blocking());
context.spawn(
yourBehavior,
"DispatcherFromConfig",
DispatcherSelector.fromConfig("your-dispatcher"));
DispatcherSelector
有两种方便的方法来查找默认的调度器和自定义调度器,你可以使用它来执行阻塞的 Actor,例如不支持CompletionStages
的遗留数据库 API。
最后一个示例演示如何从配置中加载自定义调度器,并在application.conf
中对此进行答复:
your-dispatcher {
type = Dispatcher
executor = "thread-pool-executor"
thread-pool-executor {
fixed-pool-size = 32
}
throughput = 1
}
有关如何配置自定义调度器的完整详细信息,请参阅「非类型化文档」。
英文原文链接:Dispatchers.