调度器
依赖
调度器(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>
8. <!-- Gradle -->
9. dependencies {
10. compile group: 'com.typesafe.akka', name: 'akka-actor-typed_2.12', version: '2.5.23'
11. }
13. <!-- sbt -->
14. 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.
