akka流在一个简单的流程中创造了多少个演员?

时间:2016-05-01 10:36:25

标签: akka akka-stream

我有一个流代码

   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演员的确切功能是什么?

1 个答案:

答案 0 :(得分:2)

当实现akka-stream图时,它至少会创建一个actor,即实际执行流阶段的actor。如果图形包含异步边界,则当流运行时,边界的每一边都属于一个单独的actor。

在你的情况下,Source.actorRef将创建一个actor,而其余的流将在一个单独的actor中运行。然而,这些参与者是实现细节,而不是您的应用程序将直接与之交互。

演员的名字很奇怪,因为你可以根据自己的喜好多次实现你的图形,每个物化都会创造出演员。