Source<Out,Mat> 的类型参数是什么意思?

What do the type parameters to Source<Out,Mat> mean?

我正在尝试了解指定的 Akka 流的源类型 here

不幸的是,我找到的文档和示例没有解释每个类型参数的实际含义。我猜 Out 是源在具体化时发出的类型。那是对的吗?其他类型参数 Mat 是什么?

你是对的,这是 Source 发出的元素的类型。

垫子

这是Source实体化的类型。请注意,每个阶段(Flows、Sinks 等)也会具体化为一个值。 这本质上是舞台本身的副产品 之后是 运行。

您可以将其想象成在 运行ning 时与舞台互动的一种方式。查看 Akka 提供的现成 Source 示例是了解其要点的好方法。

  • Source.single 将实现 NotUsed。您无法与源进行交互,因为它只会直接生成一个元素然后完成。

  • Source.queue 将具体化为 SourceQueue。这是一个更有趣的案例,因为您可以通过 offer 发送消息与源进行交互。您 offer 的消息将由源发出。

  • Source.maybe 将具体化为 Promise。您可以使用 Promise 来控制源并使其发出一个元素,或者 None.

当您连接不同的阶段时,请注意每个阶段都可能具有有用的物化值。您可以使用 viaMat/toMatKeep DSL 选择要保留的内容。 当在组合图上调用 run() 时,将返回一个或多个物化值。

查看下面示例中的类型是了解 API:

要点的最佳方式
  val source: Source[Int, MatSrc]
  val sink: Sink[Int, MatSnk]

  val matSrc: MatSrc = source.toMat(sink)(Keep.left).run()
  val matSnk: MatSnk = source.toMat(sink)(Keep.right).run()
  val (m1: MatSrc, m2: MatSnk) = source.toMat(sink)(Keep.both).run()
  val n: NotUsed = source.toMat(sink)(Keep.none).run()

请注意,您可以在许多示例中找到更简洁的 DSL 实际上是上述的快捷方式,其中仅保留最后阶段(例如接收器)的物化值。

  val mat3: Mat3 = source.viaMat(flow)(Keep.right).toMat(sink)(Keep.right).run()

相同
  val mat3: Mat3 = source.via(flow).runWith(sink)

请参阅下面的文档以进一步阅读。

http://doc.akka.io/docs/akka/2.4/java/stream/stream-quickstart.html#Materialized_values