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

how many actor does akka stream create in a simple flow?

我有流码

   val source = Source.actorRef[Msg[T]](1000, OverflowStrategy.dropHead)
   val flow=source.map(println(_)).to(Sink.onComplete{case _=>println("complete")}).run()

在我 运行 代码之后,我从日志文件中发现,akka 创建了两个参与者:

 akka://xxxx/flow-0-0-unknown-operation#-969158424]
 akka://xxxx/flow-0-1-actorRefSource#-1265269541]

这个"unknown-operation"演员是什么?

我可以重命名吗?我有点困惑,因为一旦我将代码更改为:

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

在具体化 akka-stream 图时,它至少会创建一个 actor,即实际执行流阶段的 actor。如果图包含异步边界,当流 运行ning.

时,边界的每一侧都将属于一个单独的参与者。

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

演员的名字很奇怪,因为您可以根据需要多次具体化图形,并且每次具体化都会创建演员。