Вышел
Вы правы, это тип элементов, испускаемых Source
.
Мат
Это тип материализации Source
. Обратите внимание, что каждый этап (Flow
s, Sink
s и т. д.) также материализуется в значение. По сути, это побочный продукт самого этапа после его запуска.
Вы можете представить его как средство взаимодействия со сценой во время ее работы. Посмотрите на примеры готовых Source
, предлагаемых Akka, — это хороший способ понять суть.
Source.single
материализуется в NotUsed
. У вас нет возможности взаимодействовать с источником, так как он сразу создаст только один элемент, а затем завершит его.
Source.queue
материализуется в SourceQueue
. Это более интересный случай, так как вы можете взаимодействовать с источником, отправляя ему сообщения offer
. Сообщения, которые вы offer
, будут отправлены источником.
Source.maybe
материализуется в Promise
. Вы можете использовать Promise
для управления источником и заставить его излучать один элемент или None
.
Когда вы объединяете разные этапы, обратите внимание, что каждый этап потенциально может иметь полезную материализованную ценность. Вы можете выбрать, какие из них оставить, используя viaMat
/toMat
и Keep
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
person
Stefano Bonetti
schedule
13.12.2016