下面的代码无法编译,它表示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()
[2.6.x的Akka文档指示已弃用ActorMaterializer:“使用具有流属性或配置设置的系统范围的Materializer或Materializer.apply(actorContext)来更改默认值。”
改用它:
import akka.Done
import akka.actor.ActorSystem
import akka.actor.typed.Behavior
import akka.actor.typed.scaladsl.Behaviors
import akka.stream.Materializer
object Main {
def main(Args: Array[String]) : Unit = {
val guardian: Behavior[Done] = Behaviors.setup(_ => {
Behaviors.receiveMessage{
case Done => Behaviors.stopped
}
})
val as = ActorSystem()
val materializer = Materializer(as)
}
}
Akka Streams此时需要一个“经典”(无类型)ActorSystem
,可以将其隐式转换为实现器。
因此,如果在Akka类型的Behavior
中实现流,则将
implicit val materializer = context.classicActorContext.system
并且如果在actor之外实现流,但是您在其中键入了ActorSystem
:
implicit val materializer = typedActorSystem.classicSystem