我有一个流代码
val source = Source.actorRef[Msg[T]](1000, OverflowStrategy.dropHead)
val flow=source.map(println(_)).to(Sink.onComplete{case _=>println("complete")}).run()
运行代码后,我从日志文件中发现,akka创建了两个actor:
akka://xxxx/flow-0-0-unknown-operation#-969158424]
akka://xxxx/flow-0-1-actorRefSource#-1265269541]
这个“未知操作”演员是什么?
可以重命名吗?我有点困惑,因为我将代码更改为:
val flow=source.map(println(_)).to(Sink.onComplete{case _=>receiver.stop()})
.named("iwantName").run()
并将日志输出为:
akka://xxx/flow-0-0-unknown-operation#1904555295]
akka://xxx/flow-0-1-iwantName-actorRefSource#-1328507659]
我尝试将其重命名为“iwantName”,但它改为另一个演员。
有人可以向我解释一下,2演员的确切功能是什么?
答案 0 :(得分:2)
当实现akka-stream图时,它至少会创建一个actor,即实际执行流阶段的actor。如果图形包含异步边界,则当流运行时,边界的每一边都属于一个单独的actor。
在你的情况下,Source.actorRef
将创建一个actor,而其余的流将在一个单独的actor中运行。然而,这些参与者是实现细节,而不是您的应用程序将直接与之交互。
演员的名字很奇怪,因为你可以根据自己的喜好多次实现你的图形,每个物化都会创造出演员。