Nic*_*oiu 3 scala akka akka-stream akka-typed
下面的代码不能编译,它说 ActorMaterializer 缺少一个隐式的 ActorRefFactory。我该如何提供?
val guardian: Behavior[Done] = Behaviors.setup(_ => {
Behaviors.receiveMessage{
case Done => Behaviors.stopped
}
})
implicit val sys = ActorSystem(guardian, "sys")
implicit val materializer: Materializer = ActorMaterializer()
Run Code Online (Sandbox Code Playgroud)
Akka Streams 此时需要一个“经典”(无类型)ActorSystem,它可以隐式转换为物化器。
因此,如果在 Akka Typed 中具体化一个流Behavior,人们会
implicit val materializer = context.classicActorContext.system
Run Code Online (Sandbox Code Playgroud)
如果在演员之外具体化一个流,但你有一个类型ActorSystem:
implicit val materializer = typedActorSystem.classicSystem
Run Code Online (Sandbox Code Playgroud)
正如@johanandren所提到的,我们还可以将 Typed 放入ActorSystem隐式作用域中,这将允许隐式转换Materializer生效。
implicit val materializer = context.classicActorContext.system
Run Code Online (Sandbox Code Playgroud)
以前的答案是独立的新 API 的一半。
类型化ActorSystem也可以隐式转换以提供系统实现器,因此仅将其作为隐式可用就足够了。
例如:
Behaviors.setup { ctx =>
implicit val system = ctx.system
Source(1 to 10).runForeach(println)
...
}
Run Code Online (Sandbox Code Playgroud)
它的内部工作是从Materializer伴随对象中可用的隐式转换,它将 a 的系统实现器提取ClassicActorSystemProvider为 a Materializer。类型化和经典ActorSystem实现ClassicActorSystemProvider。
| 归档时间: |
|
| 查看次数: |
1419 次 |
| 最近记录: |