Class Flow<In,Out,Mat>
- java.lang.Object
-
- akka.stream.javadsl.Flow<In,Out,Mat>
-
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method Description Flow<In,Out,Mat>
addAttributes(Attributes attr)
Add the given attributes to thisFlow
.Flow<In,Out,Mat>
alsoTo(Graph<SinkShape<Out>,?> that)
<M2,M3>
Flow<In,Out,M3>alsoToMat(Graph<SinkShape<Out>,M2> that, Function2<Mat,M2,M3> matF)
<U,CtxU,CtxOut>
FlowWithContext<U,CtxU,Out,CtxOut,Mat>asFlowWithContext(Function2<U,CtxU,In> collapseContext, Function<Out,CtxOut> extractContext)
Turns a Flow into a FlowWithContext which manages a context per element along a stream.<S> Flow<In,S,Mat>
ask(int parallelism, ActorRef ref, java.lang.Class<S> mapTo, Timeout timeout)
Use theask
pattern to send a request-reply message to the targetref
actor.<S> Flow<In,S,Mat>
ask(ActorRef ref, java.lang.Class<S> mapTo, Timeout timeout)
Use theask
pattern to send a request-reply message to the targetref
actor.Flow<In,Out,Mat>
asScala()
Converts this Flow to its Scala DSL counterpartFlow<In,Out,Mat>
async()
Put an asynchronous boundary around thisFlow
Flow<In,Out,Mat>
async(java.lang.String dispatcher)
Put an asynchronous boundary around thisFlow
Flow<In,Out,Mat>
async(java.lang.String dispatcher, int inputBufferSize)
Put an asynchronous boundary around thisFlow
Flow<In,Out,Mat>
backpressureTimeout(java.time.Duration timeout)
If the time between the emission of an element and the following downstream demand exceeds the provided timeout, the stream is failed with aTimeoutException
.Flow<In,Out,Mat>
backpressureTimeout(scala.concurrent.duration.FiniteDuration timeout)
Deprecated.Use the overloaded one which accepts java.time.Duration instead.<S> Flow<In,S,Mat>
batch(long max, Function<Out,S> seed, Function2<S,Out,S> aggregate)
Allows a faster upstream to progress independently of a slower subscriber by aggregating elements into batches until the subscriber is ready to accept them.<S> Flow<In,S,Mat>
batchWeighted(long max, Function<Out,java.lang.Long> costFn, Function<Out,S> seed, Function2<S,Out,S> aggregate)
Allows a faster upstream to progress independently of a slower subscriber by aggregating elements into batches until the subscriber is ready to accept them.Flow<In,Out,Mat>
buffer(int size, OverflowStrategy overflowStrategy)
Adds a fixed size buffer in the flow that allows to store elements from a faster upstream until it becomes full.<T> Flow<In,T,Mat>
collect(scala.PartialFunction<Out,T> pf)
Transform this stream by applying the given partial function to each of the elements on which the function is defined as they pass through this processing step.<T> Flow<In,T,Mat>
collectType(java.lang.Class<T> clazz)
Transform this stream by testing the type of each of the elements on which the element is an instance of the provided type as they pass through this processing step.Flow<In,Out,Mat>
completionTimeout(java.time.Duration timeout)
If the completion of the stream does not happen until the provided timeout, the stream is failed with aTimeoutException
.Flow<In,Out,Mat>
completionTimeout(scala.concurrent.duration.FiniteDuration timeout)
Deprecated.Use the overloaded one which accepts java.time.Duration instead.<M> Flow<In,Out,Mat>
concat(Graph<SourceShape<Out>,M> that)
<M,M2>
Flow<In,Out,M2>concatMat(Graph<SourceShape<Out>,M> that, Function2<Mat,M,M2> matF)
Flow<In,Out,Mat>
conflate(Function2<Out,Out,Out> aggregate)
Allows a faster upstream to progress independently of a slower subscriber by conflating elements into a summary until the subscriber is ready to accept them.<S> Flow<In,S,Mat>
conflateWithSeed(Function<Out,S> seed, Function2<S,Out,S> aggregate)
Allows a faster upstream to progress independently of a slower subscriber by conflating elements into a summary until the subscriber is ready to accept them.static <T> Flow<T,T,NotUsed>
create()
Flow<In,Out,Mat>
delay(java.time.Duration of, DelayOverflowStrategy strategy)
Shifts elements emission in time by a specified amount.Flow<In,Out,Mat>
delay(scala.concurrent.duration.FiniteDuration of, DelayOverflowStrategy strategy)
Deprecated.Use the overloaded one which accepts java.time.Duration instead.Flow<In,Out,Mat>
detach()
Detaches upstream demand from downstream demand without detaching the stream rates; in other words acts like a buffer of size 1.Flow<In,Out,Mat>
divertTo(Graph<SinkShape<Out>,?> that, Predicate<Out> when)
<M2,M3>
Flow<In,Out,M3>divertToMat(Graph<SinkShape<Out>,M2> that, Predicate<Out> when, Function2<Mat,M2,M3> matF)
Flow<In,Out,Mat>
drop(long n)
Discard the given number of elements at the beginning of the stream.Flow<In,Out,Mat>
dropWhile(Predicate<Out> p)
Discard elements at the beginning of the stream while predicate is true.Flow<In,Out,Mat>
dropWithin(java.time.Duration d)
Discard the elements received within the given duration at beginning of the stream.Flow<In,Out,Mat>
dropWithin(scala.concurrent.duration.FiniteDuration d)
Deprecated.Use the overloaded one which accepts java.time.Duration instead.<U> Flow<In,U,Mat>
expand(Function<Out,java.util.Iterator<U>> expander)
Allows a faster downstream to progress independently of a slower upstream by extrapolating elements from an older element until new element comes from the upstream.Flow<In,Out,Mat>
extrapolate(Function<Out,java.util.Iterator<Out>> extrapolator)
Allows a faster downstream to progress independent of a slower upstream.Flow<In,Out,Mat>
extrapolate(Function<Out,java.util.Iterator<Out>> extrapolator, Out initial)
Allows a faster downstream to progress independent of a slower upstream.Flow<In,Out,Mat>
filter(Predicate<Out> p)
Only pass on those elements that satisfy the given predicate.Flow<In,Out,Mat>
filterNot(Predicate<Out> p)
Only pass on those elements that NOT satisfy the given predicate.<T,M>
Flow<In,T,Mat>flatMapConcat(Function<Out,? extends Graph<SourceShape<T>,M>> f)
Transform each input element into aSource
of output elements that is then flattened into the output stream by concatenation, fully consuming one Source after the other.<T,M>
Flow<In,T,Mat>flatMapMerge(int breadth, Function<Out,? extends Graph<SourceShape<T>,M>> f)
Transform each input element into aSource
of output elements that is then flattened into the output stream by merging, where at mostbreadth
substreams are being consumed at any given time.<T> Flow<In,T,Mat>
fold(T zero, Function2<T,Out,T> f)
Similar toscan
but only emits its result when the upstream completes, after which it also completes.<T> Flow<In,T,Mat>
foldAsync(T zero, Function2<T,Out,java.util.concurrent.CompletionStage<T>> f)
Similar tofold
but with an asynchronous function.static <I,O>
Flow<I,O,NotUsed>fromFunction(Function<I,O> f)
Creates a [Flow] which will use the given function to transform its inputs to outputs.static <I,O,M>
Flow<I,O,M>fromGraph(Graph<FlowShape<I,O>,M> g)
A graph with the shape of a flow logically is a flow, this method makes it so also in type.static <I,O>
Flow<I,O,NotUsed>fromProcessor(Creator<org.reactivestreams.Processor<I,O>> processorFactory)
static <I,O,Mat>
Flow<I,O,Mat>fromProcessorMat(Creator<Pair<org.reactivestreams.Processor<I,O>,Mat>> processorFactory)
static <I,O>
Flow<I,O,NotUsed>fromSinkAndSource(Graph<SinkShape<I>,?> sink, Graph<SourceShape<O>,?> source)
Creates aFlow
from aSink
and aSource
where the Flow's input will be sent to the Sink and the Flow's output will come from the Source.static <I,O>
Flow<I,O,NotUsed>fromSinkAndSourceCoupled(Graph<SinkShape<I>,?> sink, Graph<SourceShape<O>,?> source)
Allows coupling termination (cancellation, completion, erroring) of Sinks and Sources while creating a Flow from them.static <I,O,M1,M2,M>
Flow<I,O,M>fromSinkAndSourceCoupledMat(Graph<SinkShape<I>,M1> sink, Graph<SourceShape<O>,M2> source, Function2<M1,M2,M> combine)
Allows coupling termination (cancellation, completion, erroring) of Sinks and Sources while creating a Flow from them.static <I,O,M1,M2,M>
Flow<I,O,M>fromSinkAndSourceMat(Graph<SinkShape<I>,M1> sink, Graph<SourceShape<O>,M2> source, Function2<M1,M2,M> combine)
Creates aFlow
from aSink
and aSource
where the Flow's input will be sent to the Sink and the Flow's output will come from the Source.<K> SubFlow<In,Out,Mat>
groupBy(int maxSubstreams, Function<Out,K> f)
This operation demultiplexes the incoming stream into separate output streams, one for each element key.<K> SubFlow<In,Out,Mat>
groupBy(int maxSubstreams, Function<Out,K> f, boolean allowClosedSubstreamRecreation)
This operation demultiplexes the incoming stream into separate output streams, one for each element key.Flow<In,java.util.List<Out>,Mat>
grouped(int n)
Chunk up this stream into groups of the given size, with the last group possibly smaller than requested due to end-of-stream.Flow<In,java.util.List<Out>,Mat>
groupedWeightedWithin(long maxWeight, Function<Out,java.lang.Long> costFn, java.time.Duration d)
Chunk up this stream into groups of elements received within a time window, or limited by the weight of the elements, whatever happens first.Flow<In,java.util.List<Out>,Mat>
groupedWeightedWithin(long maxWeight, Function<Out,java.lang.Long> costFn, scala.concurrent.duration.FiniteDuration d)
Deprecated.Use the overloaded one which accepts java.time.Duration instead.Flow<In,java.util.List<Out>,Mat>
groupedWithin(int n, java.time.Duration d)
Chunk up this stream into groups of elements received within a time window, or limited by the given number of elements, whatever happens first.Flow<In,java.util.List<Out>,Mat>
groupedWithin(int n, scala.concurrent.duration.FiniteDuration d)
Deprecated.Use the overloaded one which accepts java.time.Duration instead.Flow<In,Out,Mat>
idleTimeout(java.time.Duration timeout)
If the time between two processed elements exceeds the provided timeout, the stream is failed with aTimeoutException
.Flow<In,Out,Mat>
idleTimeout(scala.concurrent.duration.FiniteDuration timeout)
Deprecated.Use the overloaded one which accepts java.time.Duration instead.Flow<In,Out,Mat>
initialDelay(java.time.Duration delay)
Delays the initial element by the specified duration.Flow<In,Out,Mat>
initialDelay(scala.concurrent.duration.FiniteDuration delay)
Deprecated.Use the overloaded one which accepts java.time.Duration instead.Flow<In,Out,Mat>
initialTimeout(java.time.Duration timeout)
If the first element has not passed through this operator before the provided timeout, the stream is failed with aTimeoutException
.Flow<In,Out,Mat>
initialTimeout(scala.concurrent.duration.FiniteDuration timeout)
Deprecated.Use the overloaded one which accepts java.time.Duration instead.Flow<In,Out,Mat>
interleave(Graph<SourceShape<Out>,?> that, int segmentSize)
Flow<In,Out,Mat>
interleave(Graph<SourceShape<Out>,?> that, int segmentSize, boolean eagerClose)
<M,M2>
Flow<In,Out,M2>interleaveMat(Graph<SourceShape<Out>,M> that, int segmentSize, boolean eagerClose, Function2<Mat,M,M2> matF)
<M,M2>
Flow<In,Out,M2>interleaveMat(Graph<SourceShape<Out>,M> that, int segmentSize, Function2<Mat,M,M2> matF)
Flow<In,Out,Mat>
intersperse(Out inject)
Intersperses stream with provided element, similar to howscala.collection.immutable.List.mkString
injects a separator between a List's elements.Flow<In,Out,Mat>
intersperse(Out start, Out inject, Out end)
Intersperses stream with provided element, similar to howscala.collection.immutable.List.mkString
injects a separator between a List's elements.<I2,O2,Mat2>
Flow<I2,O2,Mat>join(Graph<BidiShape<Out,O2,I2,In>,Mat2> bidi)
<M> RunnableGraph<Mat>
join(Graph<FlowShape<Out,In>,M> flow)
Join thisFlow
to anotherFlow
, by cross connecting the inputs and outputs, creating aRunnableGraph
.<I2,O2,Mat2,M>
Flow<I2,O2,M>joinMat(Graph<BidiShape<Out,O2,I2,In>,Mat2> bidi, Function2<Mat,Mat2,M> combine)
<M,M2>
RunnableGraph<M2>joinMat(Graph<FlowShape<Out,In>,M> flow, Function2<Mat,M,M2> combine)
Join thisFlow
to anotherFlow
, by cross connecting the inputs and outputs, creating aRunnableGraph
Flow<In,Out,Mat>
keepAlive(java.time.Duration maxIdle, Creator<Out> injectedElem)
Injects additional elements if upstream does not emit for a configured amount of time.Flow<In,Out,Mat>
keepAlive(scala.concurrent.duration.FiniteDuration maxIdle, Creator<Out> injectedElem)
Deprecated.Use the overloaded one which accepts java.time.Duration instead.static <I,O,M>
Flow<I,O,M>lazyInit(Function<I,java.util.concurrent.CompletionStage<Flow<I,O,M>>> flowFactory, Creator<M> fallback)
Deprecated.Use lazyInitAsync instead.static <I,O,M>
Flow<I,O,java.util.concurrent.CompletionStage<java.util.Optional<M>>>lazyInitAsync(Creator<java.util.concurrent.CompletionStage<Flow<I,O,M>>> flowFactory)
Creates a realFlow
upon receiving the first element.Flow<In,Out,Mat>
limit(long n)
Ensure stream boundedness by limiting the number of elements from upstream.Flow<In,Out,Mat>
limitWeighted(long n, Function<Out,java.lang.Long> costFn)
Ensure stream boundedness by evaluating the cost of incoming elements using a cost function.Flow<In,Out,Mat>
log(java.lang.String name)
Logs elements flowing through the stream as well as completion and erroring.Flow<In,Out,Mat>
log(java.lang.String name, LoggingAdapter log)
Logs elements flowing through the stream as well as completion and erroring.Flow<In,Out,Mat>
log(java.lang.String name, Function<Out,java.lang.Object> extract)
Logs elements flowing through the stream as well as completion and erroring.Flow<In,Out,Mat>
log(java.lang.String name, Function<Out,java.lang.Object> extract, LoggingAdapter log)
Logs elements flowing through the stream as well as completion and erroring.<T> Flow<In,T,Mat>
map(Function<Out,T> f)
Transform this stream by applying the given function to each of the elements as they pass through this processing step.<T> Flow<In,T,Mat>
mapAsync(int parallelism, Function<Out,java.util.concurrent.CompletionStage<T>> f)
Transform this stream by applying the given function to each of the elements as they pass through this processing step.<T> Flow<In,T,Mat>
mapAsyncUnordered(int parallelism, Function<Out,java.util.concurrent.CompletionStage<T>> f)
Transform this stream by applying the given function to each of the elements as they pass through this processing step.<T> Flow<In,T,Mat>
mapConcat(Function<Out,java.lang.Iterable<T>> f)
Transform each input element into anIterable
of output elements that is then flattened into the output stream.Flow<In,Out,Mat>
mapError(scala.PartialFunction<java.lang.Throwable,java.lang.Throwable> pf)
While similar torecover(scala.PartialFunction<java.lang.Throwable,Out>)
this operator can be used to transform an error signal to a different one *without* logging it as an error in the process.<Mat2> Flow<In,Out,Mat2>
mapMaterializedValue(Function<Mat,Mat2> f)
Transform only the materialized value of this Flow, leaving all other properties as they were.Flow<In,Out,Mat>
merge(Graph<SourceShape<Out>,?> that)
Flow<In,Out,Mat>
merge(Graph<SourceShape<Out>,?> that, boolean eagerComplete)
<M,M2>
Flow<In,Out,M2>mergeMat(Graph<SourceShape<Out>,M> that, Function2<Mat,M,M2> matF)
<M,M2>
Flow<In,Out,M2>mergeMat(Graph<SourceShape<Out>,M> that, Function2<Mat,M,M2> matF, boolean eagerComplete)
<M> Flow<In,Out,Mat>
mergeSorted(Graph<SourceShape<Out>,M> that, java.util.Comparator<Out> comp)
<Mat2,Mat3>
Flow<In,Out,Mat3>mergeSortedMat(Graph<SourceShape<Out>,Mat2> that, java.util.Comparator<Out> comp, Function2<Mat,Mat2,Mat3> matF)
Flow<In,Out,Pair<Mat,FlowMonitor<Out>>>
monitor()
Materializes toPair
, which is unlike most other operators (!), in which usually the default materialized value keeping semantics is to keep the left value (by passing> Keep.left()
to a*Mat
version of a method).<M> Flow<In,Out,M>
monitor(Function2<Mat,FlowMonitor<Out>,M> combine)
Deprecated.Use monitor() or monitorMat(combine) instead.<M> Flow<In,Out,M>
monitorMat(Function2<Mat,FlowMonitor<Out>,M> combine)
Materializes toFlowMonitor[Out]
that allows monitoring of the current flow.Flow<In,Out,Mat>
named(java.lang.String name)
Add aname
attribute to this Flow.
static <T> Flow<T,T,NotUsed>
of(java.lang.Class<T> clazz)
Create a `Flow` which can process elements of type `T`.<M> Flow<In,Out,Mat>
orElse(Graph<SourceShape<Out>,M> secondary)
Provides a secondary source that will be consumed if this source completes without any elements passing by.<M2,M3>
Flow<In,Out,M3>orElseMat(Graph<SourceShape<Out>,M2> secondary, Function2<Mat,M2,M3> matF)
Provides a secondary source that will be consumed if this source completes without any elements passing by.Flow<In,Pair<java.util.List<Out>,Source<Out,NotUsed>>,Mat>
prefixAndTail(int n)
Takes up ton
elements from the stream (less thann
if the upstream completes before emittingn
elements) and returns a pair containing a strict sequence of the taken element and a stream representing the remaining elements.<M> Flow<In,Out,Mat>
prepend(Graph<SourceShape<Out>,M> that)
<M,M2>
Flow<In,Out,M2>prependMat(Graph<SourceShape<Out>,M> that, Function2<Mat,M,M2> matF)
Flow<In,Out,Mat>
recover(java.lang.Class<? extends java.lang.Throwable> clazz, java.util.function.Supplier<Out> supplier)
Deprecated.Use recoverWithRetries instead.Flow<In,Out,Mat>
recover(scala.PartialFunction<java.lang.Throwable,Out> pf)
Deprecated.Use recoverWithRetries instead.Flow<In,Out,Mat>
recoverWith(java.lang.Class<? extends java.lang.Throwable> clazz, java.util.function.Supplier<Graph<SourceShape<Out>,NotUsed>> supplier)
RecoverWith allows to switch to alternative Source on flow failure.Flow<In,Out,Mat>
recoverWith(scala.PartialFunction<java.lang.Throwable,? extends Graph<SourceShape<Out>,NotUsed>> pf)
RecoverWith allows to switch to alternative Source on flow failure.Flow<In,Out,Mat>
recoverWithRetries(int attempts, java.lang.Class<? extends java.lang.Throwable> clazz, java.util.function.Supplier<Graph<SourceShape<Out>,NotUsed>> supplier)
RecoverWithRetries allows to switch to alternative Source on flow failure.Flow<In,Out,Mat>
recoverWithRetries(int attempts, scala.PartialFunction<java.lang.Throwable,Graph<SourceShape<Out>,NotUsed>> pf)
RecoverWithRetries allows to switch to alternative Source on flow failure.Flow<In,Out,Mat>
reduce(Function2<Out,Out,Out> f)
Similar tofold
but uses first element as zero element.<T,U>
Pair<T,U>runWith(Graph<SourceShape<In>,T> source, Graph<SinkShape<Out>,U> sink, Materializer materializer)
Connect theSource
to thisFlow
and then connect it to theSink
and run it.<T> Flow<In,T,Mat>
scan(T zero, Function2<T,Out,T> f)
Similar tofold
but is not a terminal operation, emits its current value which starts atzero
and then applies the current and next value to the given functionf
, emitting the next current value.<T> Flow<In,T,Mat>
scanAsync(T zero, Function2<T,Out,java.util.concurrent.CompletionStage<T>> f)
Similar toscan
but with a asynchronous function, emits its current value which starts atzero
and then applies the current and next value to the given functionf
, emitting aFuture
that resolves to the next current value.static <I,O,M>
Flow<I,O,java.util.concurrent.CompletionStage<M>>setup(java.util.function.BiFunction<ActorMaterializer,Attributes,Flow<I,O,M>> factory)
Defers the creation of aFlow
until materialization.FlowShape<In,Out>
shape()
The shape of a graph is all that is externally visible: its inlets and outlets.Flow<In,java.util.List<Out>,Mat>
sliding(int n, int step)
Apply a sliding window over the stream and return the windows as groups of elements, with the last group possibly smaller than requested due to end-of-stream.int
sliding$default$2()
SubFlow<In,Out,Mat>
splitAfter(Predicate<Out> p)
This operation applies the given predicate to all incoming elements and emits them to a stream of output streams.SubFlow<In,Out,Mat>
splitAfter(SubstreamCancelStrategy substreamCancelStrategy, Predicate<Out> p)
This operation applies the given predicate to all incoming elements and emits them to a stream of output streams.SubFlow<In,Out,Mat>
splitWhen(Predicate<Out> p)
This operation applies the given predicate to all incoming elements and emits them to a stream of output streams, always beginning a new one with the current element if the given predicate returns true for it.SubFlow<In,Out,Mat>
splitWhen(SubstreamCancelStrategy substreamCancelStrategy, Predicate<Out> p)
This operation applies the given predicate to all incoming elements and emits them to a stream of output streams, always beginning a new one with the current element if the given predicate returns true for it.<T> Flow<In,T,Mat>
statefulMapConcat(Creator<Function<Out,java.lang.Iterable<T>>> f)
Transform each input element into anIterable
of output elements that is then flattened into the output stream.Flow<In,Out,Mat>
take(long n)
Terminate processing (and cancel the upstream publisher) after the given number of elements.Flow<In,Out,Mat>
takeWhile(Predicate<Out> p)
Terminate processing (and cancel the upstream publisher) after predicate returns false for the first time.Flow<In,Out,Mat>
takeWhile(Predicate<Out> p, boolean inclusive)
Terminate processing (and cancel the upstream publisher) after predicate returns false for the first time.Flow<In,Out,Mat>
takeWithin(java.time.Duration d)
Terminate processing (and cancel the upstream publisher) after the given duration.Flow<In,Out,Mat>
takeWithin(scala.concurrent.duration.FiniteDuration d)
Deprecated.Use the overloaded one which accepts java.time.Duration instead.Flow<In,Out,Mat>
throttle(int elements, java.time.Duration per)
Sends elements downstream with speed limited toelements/per
.Flow<In,Out,Mat>
throttle(int cost, java.time.Duration per, int maximumBurst, Function<Out,java.lang.Integer> costCalculation, ThrottleMode mode)
Sends elements downstream with speed limited tocost/per
.Flow<In,Out,Mat>
throttle(int elements, java.time.Duration per, int maximumBurst, ThrottleMode mode)
Sends elements downstream with speed limited toelements/per
.Flow<In,Out,Mat>
throttle(int cost, java.time.Duration per, Function<Out,java.lang.Integer> costCalculation)
Sends elements downstream with speed limited tocost/per
.Flow<In,Out,Mat>
throttle(int cost, scala.concurrent.duration.FiniteDuration per, int maximumBurst, Function<Out,java.lang.Integer> costCalculation, ThrottleMode mode)
Deprecated.Use the overloaded one which accepts java.time.Duration instead.Flow<In,Out,Mat>
throttle(int elements, scala.concurrent.duration.FiniteDuration per, int maximumBurst, ThrottleMode mode)
Deprecated.Use the overloaded one which accepts java.time.Duration instead.Flow<In,Out,Mat>
throttleEven(int cost, java.time.Duration per, Function<Out,java.lang.Integer> costCalculation, ThrottleMode mode)
Deprecated.Use throttle without `maximumBurst` parameter instead.Flow<In,Out,Mat>
throttleEven(int elements, java.time.Duration per, ThrottleMode mode)
Deprecated.Use throttle without `maximumBurst` parameter instead.Flow<In,Out,Mat>
throttleEven(int cost, scala.concurrent.duration.FiniteDuration per, Function<Out,java.lang.Integer> costCalculation, ThrottleMode mode)
Deprecated.Use throttle without `maximumBurst` parameter instead.Flow<In,Out,Mat>
throttleEven(int elements, scala.concurrent.duration.FiniteDuration per, ThrottleMode mode)
Deprecated.Use the overloaded one which accepts java.time.Duration instead.Sink<In,Mat>
to(Graph<SinkShape<Out>,?> sink)
<M,M2>
Sink<In,M2>toMat(Graph<SinkShape<Out>,M> sink, Function2<Mat,M,M2> combine)
RunnableGraph<org.reactivestreams.Processor<In,Out>>
toProcessor()
Converts this Flow to aRunnableGraph
that materializes to a Reactive StreamsProcessor
which implements the operations encapsulated by this Flow.java.lang.String
toString()
LinearTraversalBuilder
traversalBuilder()
INTERNAL API.static <In,SuperOut,Out extends SuperOut,M>
Flow<In,SuperOut,M>upcast(Flow<In,Out,M> flow)
Upcast a stream of elements to a stream of supertypes of that element.<T,M>
Flow<In,T,Mat>via(Graph<FlowShape<Out,T>,M> flow)
Transform thisFlow
by appending the given processing steps.<T,M,M2>
Flow<In,T,M2>viaMat(Graph<FlowShape<Out,T>,M> flow, Function2<Mat,M,M2> combine)
Transform thisFlow
by appending the given processing steps.Flow<In,Out,Mat>
watch(ActorRef ref)
The operator fails with anWatchedActorTerminatedException
if the target actor is terminated.<M> Flow<In,Out,M>
watchTermination(Function2<Mat,java.util.concurrent.CompletionStage<Done>,M> matF)
Materializes toCompletionStage
that completes on getting termination message.Flow<In,Out,Mat>
wireTap(Procedure<Out> f)
This is a simplified version ofwireTap(Sink)
that takes only a simple procedure.Flow<In,Out,Mat>
wireTap(Graph<SinkShape<Out>,?> that)
<M2,M3>
Flow<In,Out,M3>wireTapMat(Graph<SinkShape<Out>,M2> that, Function2<Mat,M2,M3> matF)
Flow<In,Out,Mat>
withAttributes(Attributes attr)
Replace the attributes of thisFlow
with the given ones.<T> Flow<In,Pair<Out,T>,Mat>
zip(Graph<SourceShape<T>,?> source)
<T> Flow<In,Pair<Out,T>,Mat>
zipLatest(Graph<SourceShape<T>,?> source)
Combine the elements of 2 streams into a stream of tuples, picking always the latest element of each.<T,M,M2>
Flow<In,Pair<Out,T>,M2>zipLatestMat(Graph<SourceShape<T>,M> that, Function2<Mat,M,M2> matF)
<Out2,Out3>
Flow<In,Out3,Mat>zipLatestWith(Graph<SourceShape<Out2>,?> that, Function2<Out,Out2,Out3> combine)
Combine the elements of multiple streams into a stream of combined elements using a combiner function, picking always the latest of the elements of each source.<Out2,Out3,M,M2>
Flow<In,Out3,M2>zipLatestWithMat(Graph<SourceShape<Out2>,M> that, Function2<Out,Out2,Out3> combine, Function2<Mat,M,M2> matF)
<T,M,M2>
Flow<In,Pair<Out,T>,M2>zipMat(Graph<SourceShape<T>,M> that, Function2<Mat,M,M2> matF)
<Out2,Out3>
Flow<In,Out3,Mat>zipWith(Graph<SourceShape<Out2>,?> that, Function2<Out,Out2,Out3> combine)
Flow<In,Pair<Out,java.lang.Long>,Mat>
zipWithIndex()
Combine the elements of current flow into a stream of tuples consisting of all elements paired with their index.<Out2,Out3,M,M2>
Flow<In,Out3,M2>zipWithMat(Graph<SourceShape<Out2>,M> that, Function2<Out,Out2,Out3> combine, Function2<Mat,M,M2> matF)
-
-
-
Method Detail
-
fromProcessor
public static <I,O> Flow<I,O,NotUsed> fromProcessor(Creator<org.reactivestreams.Processor<I,O>> processorFactory)
-
fromProcessorMat
public static <I,O,Mat> Flow<I,O,Mat> fromProcessorMat(Creator<Pair<org.reactivestreams.Processor<I,O>,Mat>> processorFactory)
-
fromFunction
public static <I,O> Flow<I,O,NotUsed> fromFunction(Function<I,O> f)
Creates a [Flow] which will use the given function to transform its inputs to outputs. It is equivalent toFlow.create[T].map(f)
- Parameters:
f
- (undocumented)- Returns:
- (undocumented)
-
of
public static <T> Flow<T,T,NotUsed> of(java.lang.Class<T> clazz)
Create a `Flow` which can process elements of type `T`.
-
fromGraph
public static <I,O,M> Flow<I,O,M> fromGraph(Graph<FlowShape<I,O>,M> g)
A graph with the shape of a flow logically is a flow, this method makes it so also in type.- Parameters:
g
- (undocumented)- Returns:
- (undocumented)
-
setup
public static <I,O,M> Flow<I,O,java.util.concurrent.CompletionStage<M>> setup(java.util.function.BiFunction<ActorMaterializer,Attributes,Flow<I,O,M>> factory)
Defers the creation of aFlow
until materialization. Thefactory
function exposesActorMaterializer
which is going to be used during materialization andAttributes
of theFlow
returned by this method.- Parameters:
factory
- (undocumented)- Returns:
- (undocumented)
-
fromSinkAndSource
public static <I,O> Flow<I,O,NotUsed> fromSinkAndSource(Graph<SinkShape<I>,?> sink, Graph<SourceShape<O>,?> source)
Creates aFlow
from aSink
and aSource
where the Flow's input will be sent to the Sink and the Flow's output will come from the Source.The resulting flow can be visualized as:
+----------------------------------------------+ | Resulting Flow[I, O, NotUsed] | | | | +---------+ +-----------+ | | | | | | | I ~~> | Sink[I] | [no-connection!] | Source[O] | ~~> O | | | | | | | +---------+ +-----------+ | +----------------------------------------------+
The completion of the Sink and Source sides of a Flow constructed using this method are independent. So if the Sink receives a completion signal, the Source side will remain unaware of that. If you are looking to couple the termination signals of the two sides use
Flow.fromSinkAndSourceCoupled
instead.See also
<I,O,M1,M2,M>fromSinkAndSourceMat(akka.stream.Graph<akka.stream.SinkShape<I>,M1>,akka.stream.Graph<akka.stream.SourceShape<O>,M2>,akka.japi.function.Function2<M1,M2,M>)
when access to materialized values of the parameters is needed.- Parameters:
sink
- (undocumented)source
- (undocumented)- Returns:
- (undocumented)
-
fromSinkAndSourceMat
public static <I,O,M1,M2,M> Flow<I,O,M> fromSinkAndSourceMat(Graph<SinkShape<I>,M1> sink, Graph<SourceShape<O>,M2> source, Function2<M1,M2,M> combine)
Creates aFlow
from aSink
and aSource
where the Flow's input will be sent to the Sink and the Flow's output will come from the Source.The resulting flow can be visualized as:
+-------------------------------------------------------+ | Resulting Flow[I, O, M] | | | | +-------------+ +---------------+ | | | | | | | I ~~> | Sink[I, M1] | [no-connection!] | Source[O, M2] | ~~> O | | | | | | | +-------------+ +---------------+ | +------------------------------------------------------+
The completion of the Sink and Source sides of a Flow constructed using this method are independent. So if the Sink receives a completion signal, the Source side will remain unaware of that. If you are looking to couple the termination signals of the two sides use
Flow.fromSinkAndSourceCoupledMat
instead.The
combine
function is used to compose the materialized values of thesink
andsource
into the materialized value of the resultingFlow
.- Parameters:
sink
- (undocumented)source
- (undocumented)combine
- (undocumented)- Returns:
- (undocumented)
-
fromSinkAndSourceCoupled
public static <I,O> Flow<I,O,NotUsed> fromSinkAndSourceCoupled(Graph<SinkShape<I>,?> sink, Graph<SourceShape<O>,?> source)
Allows coupling termination (cancellation, completion, erroring) of Sinks and Sources while creating a Flow from them. Similar toFlow.fromSinkAndSource
however couples the termination of these two operators.The resulting flow can be visualized as:
+---------------------------------------------+ | Resulting Flow[I, O, NotUsed] | | | | +---------+ +-----------+ | | | | | | | I ~~> | Sink[I] | ~~~(coupled)~~~ | Source[O] | ~~> O | | | | | | | +---------+ +-----------+ | +---------------------------------------------+
E.g. if the emitted
Flow
gets a cancellation, theSource
of course is cancelled, however the Sink will also be completed. The table below illustrates the effects in detail:Returned Flow Sink ( in
)Source ( out
)cause: upstream (sink-side) receives completion effect: receives completion effect: receives cancel cause: upstream (sink-side) receives error effect: receives error effect: receives cancel cause: downstream (source-side) receives cancel effect: completes effect: receives cancel effect: cancels upstream, completes downstream effect: completes cause: signals complete effect: cancels upstream, errors downstream effect: receives error cause: signals error or throws effect: cancels upstream, completes downstream cause: cancels effect: receives cancel See also
<I,O,M1,M2,M>fromSinkAndSourceCoupledMat(akka.stream.Graph<akka.stream.SinkShape<I>,M1>,akka.stream.Graph<akka.stream.SourceShape<O>,M2>,akka.japi.function.Function2<M1,M2,M>)
when access to materialized values of the parameters is needed.- Parameters:
sink
- (undocumented)source
- (undocumented)- Returns:
- (undocumented)
-
fromSinkAndSourceCoupledMat
public static <I,O,M1,M2,M> Flow<I,O,M> fromSinkAndSourceCoupledMat(Graph<SinkShape<I>,M1> sink, Graph<SourceShape<O>,M2> source, Function2<M1,M2,M> combine)
Allows coupling termination (cancellation, completion, erroring) of Sinks and Sources while creating a Flow from them. Similar toFlow.fromSinkAndSource
however couples the termination of these two operators.The resulting flow can be visualized as:
+-----------------------------------------------------+ | Resulting Flow[I, O, M] | | | | +-------------+ +---------------+ | | | | | | | I ~~> | Sink[I, M1] | ~~~(coupled)~~~ | Source[O, M2] | ~~> O | | | | | | | +-------------+ +---------------+ | +-----------------------------------------------------+
E.g. if the emitted
Flow
gets a cancellation, theSource
of course is cancelled, however the Sink will also be completed. The table onFlow.fromSinkAndSourceCoupled
illustrates the effects in detail.The
combine
function is used to compose the materialized values of thesink
andsource
into the materialized value of the resultingFlow
.- Parameters:
sink
- (undocumented)source
- (undocumented)combine
- (undocumented)- Returns:
- (undocumented)
-
lazyInit
public static <I,O,M> Flow<I,O,M> lazyInit(Function<I,java.util.concurrent.CompletionStage<Flow<I,O,M>>> flowFactory, Creator<M> fallback)
Deprecated.Use lazyInitAsync instead. (lazyInitAsync returns a flow with a more useful materialized value.). Since 2.5.12.Creates a realFlow
upon receiving the first element. InternalFlow
will not be created if there are no elements, because of completion, cancellation, or error.The materialized value of the
Flow
is the value that is created by thefallback
function.'''Emits when''' the internal flow is successfully created and it emits
'''Backpressures when''' the internal flow is successfully created and it backpressures
'''Completes when''' upstream completes and all elements have been emitted from the internal flow
'''Cancels when''' downstream cancels
- Parameters:
flowFactory
- (undocumented)fallback
- (undocumented)- Returns:
- (undocumented)
-
lazyInitAsync
public static <I,O,M> Flow<I,O,java.util.concurrent.CompletionStage<java.util.Optional<M>>> lazyInitAsync(Creator<java.util.concurrent.CompletionStage<Flow<I,O,M>>> flowFactory)
Creates a realFlow
upon receiving the first element. InternalFlow
will not be created if there are no elements, because of completion, cancellation, or error.The materialized value of the
Flow
is aFuture[Option[M}
that is completed withSome(mat)
when the internal flow gets materialized or withNone
when there where no elements. If the flow materialization (including the call of theflowFactory
) fails then the future is completed with a failure.'''Emits when''' the internal flow is successfully created and it emits
'''Backpressures when''' the internal flow is successfully created and it backpressures
'''Completes when''' upstream completes and all elements have been emitted from the internal flow
'''Cancels when''' downstream cancels
- Parameters:
flowFactory
- (undocumented)- Returns:
- (undocumented)
-
upcast
public static <In,SuperOut,Out extends SuperOut,M> Flow<In,SuperOut,M> upcast(Flow<In,Out,M> flow)
Upcast a stream of elements to a stream of supertypes of that element. Useful in combination with fan-in operators where you do not want to pay the cost of casting each element in amap
.- Parameters:
flow
- (undocumented)- Returns:
- A flow that accepts
In
and outputs elements of the super type
-
shape
public FlowShape<In,Out> shape()
Description copied from interface:Graph
The shape of a graph is all that is externally visible: its inlets and outlets.
-
traversalBuilder
public LinearTraversalBuilder traversalBuilder()
Description copied from interface:Graph
INTERNAL API.Every materializable element must be backed by a stream layout module
- Specified by:
traversalBuilder
in interfaceGraph<In,Out>
- Returns:
- (undocumented)
-
toString
public java.lang.String toString()
- Overrides:
toString
in classjava.lang.Object
-
mapMaterializedValue
public <Mat2> Flow<In,Out,Mat2> mapMaterializedValue(Function<Mat,Mat2> f)
Transform only the materialized value of this Flow, leaving all other properties as they were.- Parameters:
f
- (undocumented)- Returns:
- (undocumented)
-
via
public <T,M> Flow<In,T,Mat> via(Graph<FlowShape<Out,T>,M> flow)
Transform thisFlow
by appending the given processing steps.
The materialized value of the combined+---------------------------------+ | Resulting Flow[In, T, Mat] | | | | +------+ +------+ | | | | | | | In ~~> | this | ~~Out~~> | flow | ~~> T | | Mat| | M| | | +------+ +------+ | +---------------------------------+
Flow
will be the materialized value of the current flow (ignoring the other Flow’s value), useviaMat
if a different strategy is needed.See also
<T,M,M2>viaMat(akka.stream.Graph<akka.stream.FlowShape<Out,T>,M>,akka.japi.function.Function2<Mat,M,M2>)
when access to materialized values of the parameter is needed.- Parameters:
flow
- (undocumented)- Returns:
- (undocumented)
-
viaMat
public <T,M,M2> Flow<In,T,M2> viaMat(Graph<FlowShape<Out,T>,M> flow, Function2<Mat,M,M2> combine)
Transform thisFlow
by appending the given processing steps.
The+---------------------------------+ | Resulting Flow[In, T, M2] | | | | +------+ +------+ | | | | | | | In ~~> | this | ~~Out~~> | flow | ~~> T | | Mat| | M| | | +------+ +------+ | +---------------------------------+
combine
function is used to compose the materialized values of this flow and that flow into the materialized value of the resulting Flow.It is recommended to use the internally optimized
Keep.left
andKeep.right
combiners where appropriate instead of manually writing functions that pass through one of the values.- Parameters:
flow
- (undocumented)combine
- (undocumented)- Returns:
- (undocumented)
-
to
public Sink<In,Mat> to(Graph<SinkShape<Out>,?> sink)
Connect thisFlow
to aSink
, concatenating the processing steps of both.
The materialized value of the combined+------------------------------+ | Resulting Sink[In, Mat] | | | | +------+ +------+ | | | | | | | In ~~> | flow | ~~Out~~> | sink | | | | Mat| | M| | | +------+ +------+ | +------------------------------+
Sink
will be the materialized value of the current flow (ignoring the given Sink’s value), usetoMat
if a different strategy is needed.See also
<M,M2>toMat(akka.stream.Graph<akka.stream.SinkShape<Out>,M>,akka.japi.function.Function2<Mat,M,M2>)
when access to materialized values of the parameter is needed.- Parameters:
sink
- (undocumented)- Returns:
- (undocumented)
-
toMat
public <M,M2> Sink<In,M2> toMat(Graph<SinkShape<Out>,M> sink, Function2<Mat,M,M2> combine)
Connect thisFlow
to aSink
, concatenating the processing steps of both.
The+----------------------------+ | Resulting Sink[In, M2] | | | | +------+ +------+ | | | | | | | In ~~> | flow | ~Out~> | sink | | | | Mat| | M| | | +------+ +------+ | +----------------------------+
combine
function is used to compose the materialized values of this flow and that Sink into the materialized value of the resulting Sink.It is recommended to use the internally optimized
Keep.left
andKeep.right
combiners where appropriate instead of manually writing functions that pass through one of the values.- Parameters:
sink
- (undocumented)combine
- (undocumented)- Returns:
- (undocumented)
-
join
public <M> RunnableGraph<Mat> join(Graph<FlowShape<Out,In>,M> flow)
Join thisFlow
to anotherFlow
, by cross connecting the inputs and outputs, creating aRunnableGraph
.
The materialized value of the combined+------+ +-------+ | | ~Out~> | | | this | | other | | | <~In~ | | +------+ +-------+
Flow
will be the materialized value of the current flow (ignoring the other Flow’s value), usejoinMat
if a different strategy is needed.See also
<M,M2>joinMat(akka.stream.Graph<akka.stream.FlowShape<Out,In>,M>,akka.japi.function.Function2<Mat,M,M2>)
when access to materialized values of the parameter is needed.- Parameters:
flow
- (undocumented)- Returns:
- (undocumented)
-
joinMat
public <M,M2> RunnableGraph<M2> joinMat(Graph<FlowShape<Out,In>,M> flow, Function2<Mat,M,M2> combine)
Join thisFlow
to anotherFlow
, by cross connecting the inputs and outputs, creating aRunnableGraph
The+------+ +-------+ | | ~Out~> | | | this | | other | | | <~In~ | | +------+ +-------+
combine
function is used to compose the materialized values of this flow and that Flow into the materialized value of the resulting Flow.It is recommended to use the internally optimized
Keep.left
andKeep.right
combiners where appropriate instead of manually writing functions that pass through one of the values.- Parameters:
flow
- (undocumented)combine
- (undocumented)- Returns:
- (undocumented)
-
join
public <I2,O2,Mat2> Flow<I2,O2,Mat> join(Graph<BidiShape<Out,O2,I2,In>,Mat2> bidi)
Join thisFlow
to aBidiFlow
to close off the “top” of the protocol stack:
The materialized value of the combined+---------------------------+ | Resulting Flow | | | | +------+ +------+ | | | | ~Out~> | | ~~> O2 | | flow | | bidi | | | | | <~In~ | | <~~ I2 | +------+ +------+ | +---------------------------+
Flow
will be the materialized value of the current flow (ignoring theBidiFlow
’s value), use {@link Flow#joinMat[I2* joinMat} if a different strategy is needed.- Parameters:
bidi
- (undocumented)- Returns:
- (undocumented)
-
joinMat
public <I2,O2,Mat2,M> Flow<I2,O2,M> joinMat(Graph<BidiShape<Out,O2,I2,In>,Mat2> bidi, Function2<Mat,Mat2,M> combine)
Join thisFlow
to aBidiFlow
to close off the “top” of the protocol stack:
The+---------------------------+ | Resulting Flow | | | | +------+ +------+ | | | | ~Out~> | | ~~> O2 | | flow | | bidi | | | | | <~In~ | | <~~ I2 | +------+ +------+ | +---------------------------+
combine
function is used to compose the materialized values of this flow and thatBidiFlow
into the materialized value of the resultingFlow
.It is recommended to use the internally optimized
Keep.left
andKeep.right
combiners where appropriate instead of manually writing functions that pass through one of the values.See also
<T,M,M2>viaMat(akka.stream.Graph<akka.stream.FlowShape<Out,T>,M>,akka.japi.function.Function2<Mat,M,M2>)
when access to materialized values of the parameter is needed.- Parameters:
bidi
- (undocumented)combine
- (undocumented)- Returns:
- (undocumented)
-
runWith
public <T,U> Pair<T,U> runWith(Graph<SourceShape<In>,T> source, Graph<SinkShape<Out>,U> sink, Materializer materializer)
Connect theSource
to thisFlow
and then connect it to theSink
and run it.The returned tuple contains the materialized values of the
Source
andSink
, e.g. theSubscriber
of aSource.asSubscriber
andPublisher
of aSink.asPublisher
.- Parameters:
source
- (undocumented)sink
- (undocumented)materializer
- (undocumented)- Returns:
- (undocumented)
-
map
public <T> Flow<In,T,Mat> map(Function<Out,T> f)
Transform this stream by applying the given function to each of the elements as they pass through this processing step.Adheres to the
ActorAttributes.SupervisionStrategy
attribute.'''Emits when''' the mapping function returns an element
'''Backpressures when''' downstream backpressures
'''Completes when''' upstream completes
'''Cancels when''' downstream cancels
- Parameters:
f
- (undocumented)- Returns:
- (undocumented)
-
wireTap
public Flow<In,Out,Mat> wireTap(Procedure<Out> f)
This is a simplified version ofwireTap(Sink)
that takes only a simple procedure. Elements will be passed into this "side channel" function, and any of its results will be ignored.If the wire-tap operation is slow (it backpressures), elements that would've been sent to it will be dropped instead. It is similar to
alsoTo(akka.stream.Graph<akka.stream.SinkShape<Out>, ?>)
but will not affect (i.e. backpressure) the flow tapped into.This operation is useful for inspecting the passed through element, usually by means of side-effecting operations (such as
println
, or emitting metrics), for each element without having to modify it.For logging signals (elements, completion, error) consider using the
log(java.lang.String,akka.japi.function.Function<Out,java.lang.Object>,akka.event.LoggingAdapter)
operator instead, along with appropriateActorAttributes.logLevels
.'''Emits when''' upstream emits an element; the same element will be passed to the attached function, as well as to the downstream operator
'''Backpressures when''' downstream backpressures
'''Completes when''' upstream completes
'''Cancels when''' downstream cancels
- Parameters:
f
- (undocumented)- Returns:
- (undocumented)
-
mapConcat
public <T> Flow<In,T,Mat> mapConcat(Function<Out,java.lang.Iterable<T>> f)
Transform each input element into anIterable
of output elements that is then flattened into the output stream.Make sure that the
Iterable
is immutable or at least not modified after being used as an output sequence. Otherwise the stream may fail withConcurrentModificationException
or other more subtle errors may occur.The returned
Iterable
MUST NOT containnull
values, as they are illegal as stream elements - according to the Reactive Streams specification.'''Emits when''' the mapping function returns an element or there are still remaining elements from the previously calculated collection
'''Backpressures when''' downstream backpressures or there are still remaining elements from the previously calculated collection
'''Completes when''' upstream completes and all remaining elements have been emitted
'''Cancels when''' downstream cancels
- Parameters:
f
- (undocumented)- Returns:
- (undocumented)
-
statefulMapConcat
public <T> Flow<In,T,Mat> statefulMapConcat(Creator<Function<Out,java.lang.Iterable<T>>> f)
Transform each input element into anIterable
of output elements that is then flattened into the output stream. The transformation is meant to be stateful, which is enabled by creating the transformation function anew for every materialization — the returned function will typically close over mutable objects to store state between invocations. For the stateless variant seemapConcat(akka.japi.function.Function<Out, java.lang.Iterable<T>>)
.Make sure that the
Iterable
is immutable or at least not modified after being used as an output sequence. Otherwise the stream may fail withConcurrentModificationException
or other more subtle errors may occur.The returned
Iterable
MUST NOT containnull
values, as they are illegal as stream elements - according to the Reactive Streams specification.Adheres to the
ActorAttributes.SupervisionStrategy
attribute.'''Emits when''' the mapping function returns an element or there are still remaining elements from the previously calculated collection
'''Backpressures when''' downstream backpressures or there are still remaining elements from the previously calculated collection
'''Completes when''' upstream completes and all remaining elements has been emitted
'''Cancels when''' downstream cancels
- Parameters:
f
- (undocumented)- Returns:
- (undocumented)
-
mapAsync
public <T> Flow<In,T,Mat> mapAsync(int parallelism, Function<Out,java.util.concurrent.CompletionStage<T>> f)
Transform this stream by applying the given function to each of the elements as they pass through this processing step. The function returns aCompletionStage
and the value of that future will be emitted downstream. The number of CompletionStages that shall run in parallel is given as the first argument tomapAsync
. These CompletionStages may complete in any order, but the elements that are emitted downstream are in the same order as received from upstream.
If the function
f
throws an exception or if theCompletionStage
is completed with failure and the supervision decision isSupervision.stop()
the stream will be completed with failure.If the function
f
throws an exception or if theCompletionStage
is completed with failure and the supervision decision isSupervision.resume()
orSupervision.restart()
the element is dropped and the stream continues.The function
f
is always invoked on the elements in the order they arrive.'''Emits when''' the CompletionStage returned by the provided function finishes for the next element in sequence
'''Backpressures when''' the number of CompletionStages reaches the configured parallelism and the downstream backpressures or the first future is not completed
'''Completes when''' upstream completes and all CompletionStages have been completed and all elements have been emitted
'''Cancels when''' downstream cancels
- Parameters:
parallelism
- (undocumented)f
- (undocumented)- Returns:
- (undocumented)
- See Also:
mapAsyncUnordered(int, akka.japi.function.Function<Out, java.util.concurrent.CompletionStage<T>>)
-
mapAsyncUnordered
public <T> Flow<In,T,Mat> mapAsyncUnordered(int parallelism, Function<Out,java.util.concurrent.CompletionStage<T>> f)
Transform this stream by applying the given function to each of the elements as they pass through this processing step. The function returns aCompletionStage
and the value of that future will be emitted downstream. The number of CompletionStages that shall run in parallel is given as the first argument tomapAsyncUnordered
. Each processed element will be emitted downstream as soon as it is ready, i.e. it is possible that the elements are not emitted downstream in the same order as received from upstream.
If the function
f
throws an exception or if theCompletionStage
is completed with failure and the supervision decision isSupervision.stop()
the stream will be completed with failure.If the function
f
throws an exception or if theCompletionStage
is completed with failure and the supervision decision isSupervision.resume()
orSupervision.restart()
the element is dropped and the stream continues.The function
f
is always invoked on the elements in the order they arrive (even though the result of the futures returned byf
might be emitted in a different order).Adheres to the
ActorAttributes.SupervisionStrategy
attribute.'''Emits when''' any of the CompletionStages returned by the provided function complete
'''Backpressures when''' the number of CompletionStages reaches the configured parallelism and the downstream backpressures
'''Completes when''' upstream completes and all CompletionStages have been completed and all elements have been emitted
'''Cancels when''' downstream cancels
- Parameters:
parallelism
- (undocumented)f
- (undocumented)- Returns:
- (undocumented)
- See Also:
mapAsync(int, akka.japi.function.Function<Out, java.util.concurrent.CompletionStage<T>>)
-
ask
public <S> Flow<In,S,Mat> ask(ActorRef ref, java.lang.Class<S> mapTo, Timeout timeout)
Use theask
pattern to send a request-reply message to the targetref
actor. If any of the asks times out it will fail the stream with aAskTimeoutException
.The
mapTo
class parameter is used to cast the incoming responses to the expected response type.Similar to the plain ask pattern, the target actor is allowed to reply with
akka.util.Status
. Anakka.util.Status#Failure
will cause the operator to fail with the cause carried in theFailure
message.Defaults to parallelism of 2 messages in flight, since while one ask message may be being worked on, the second one still be in the mailbox, so defaulting to sending the second one a bit earlier than when first ask has replied maintains a slightly healthier throughput.
The operator fails with an
WatchedActorTerminatedException
if the target actor is terminated.Adheres to the
ActorAttributes.SupervisionStrategy
attribute.'''Emits when''' any of the CompletionStages returned by the provided function complete
'''Backpressures when''' the number of futures reaches the configured parallelism and the downstream backpressures
'''Completes when''' upstream completes and all futures have been completed and all elements have been emitted
'''Fails when''' the passed in actor terminates, or a timeout is exceeded in any of the asks performed
'''Cancels when''' downstream cancels
- Parameters:
ref
- (undocumented)mapTo
- (undocumented)timeout
- (undocumented)- Returns:
- (undocumented)
-
ask
public <S> Flow<In,S,Mat> ask(int parallelism, ActorRef ref, java.lang.Class<S> mapTo, Timeout timeout)
Use theask
pattern to send a request-reply message to the targetref
actor. If any of the asks times out it will fail the stream with aAskTimeoutException
.The
mapTo
class parameter is used to cast the incoming responses to the expected response type.Similar to the plain ask pattern, the target actor is allowed to reply with
akka.util.Status
. Anakka.util.Status#Failure
will cause the operator to fail with the cause carried in theFailure
message.Parallelism limits the number of how many asks can be "in flight" at the same time. Please note that the elements emitted by this operator are in-order with regards to the asks being issued (i.e. same behaviour as mapAsync).
The operator fails with an
WatchedActorTerminatedException
if the target actor is terminated.Adheres to the
ActorAttributes.SupervisionStrategy
attribute.'''Emits when''' any of the CompletionStages returned by the provided function complete
'''Backpressures when''' the number of futures reaches the configured parallelism and the downstream backpressures
'''Completes when''' upstream completes and all futures have been completed and all elements have been emitted
'''Fails when''' the passed in actor terminates, or a timeout is exceeded in any of the asks performed
'''Cancels when''' downstream cancels
- Parameters:
parallelism
- (undocumented)ref
- (undocumented)mapTo
- (undocumented)timeout
- (undocumented)- Returns:
- (undocumented)
-
watch
public Flow<In,Out,Mat> watch(ActorRef ref)
The operator fails with anWatchedActorTerminatedException
if the target actor is terminated.'''Emits when''' upstream emits
'''Backpressures when''' downstream backpressures
'''Completes when''' upstream completes
'''Fails when''' the watched actor terminates
'''Cancels when''' downstream cancels
- Parameters:
ref
- (undocumented)- Returns:
- (undocumented)
-
filter
public Flow<In,Out,Mat> filter(Predicate<Out> p)
Only pass on those elements that satisfy the given predicate.Adheres to the
ActorAttributes.SupervisionStrategy
attribute.'''Emits when''' the given predicate returns true for the element
'''Backpressures when''' the given predicate returns true for the element and downstream backpressures
'''Completes when''' upstream completes
'''Cancels when''' downstream cancels
- Parameters:
p
- (undocumented)- Returns:
- (undocumented)
-
filterNot
public Flow<In,Out,Mat> filterNot(Predicate<Out> p)
Only pass on those elements that NOT satisfy the given predicate.Adheres to the
ActorAttributes.SupervisionStrategy
attribute.'''Emits when''' the given predicate returns false for the element
'''Backpressures when''' the given predicate returns false for the element and downstream backpressures
'''Completes when''' upstream completes
'''Cancels when''' downstream cancels
- Parameters:
p
- (undocumented)- Returns:
- (undocumented)
-
collect
public <T> Flow<In,T,Mat> collect(scala.PartialFunction<Out,T> pf)
Transform this stream by applying the given partial function to each of the elements on which the function is defined as they pass through this processing step. Non-matching elements are filtered out.Adheres to the
ActorAttributes.SupervisionStrategy
attribute.'''Emits when''' the provided partial function is defined for the element
'''Backpressures when''' the partial function is defined for the element and downstream backpressures
'''Completes when''' upstream completes
'''Cancels when''' downstream cancels
- Parameters:
pf
- (undocumented)- Returns:
- (undocumented)
-
collectType
public <T> Flow<In,T,Mat> collectType(java.lang.Class<T> clazz)
Transform this stream by testing the type of each of the elements on which the element is an instance of the provided type as they pass through this processing step. Non-matching elements are filtered out.Adheres to the
ActorAttributes.SupervisionStrategy
attribute.'''Emits when''' the element is an instance of the provided type
'''Backpressures when''' the element is an instance of the provided type and downstream backpressures
'''Completes when''' upstream completes
'''Cancels when''' downstream cancels
- Parameters:
clazz
- (undocumented)- Returns:
- (undocumented)
-
grouped
public Flow<In,java.util.List<Out>,Mat> grouped(int n)
Chunk up this stream into groups of the given size, with the last group possibly smaller than requested due to end-of-stream.n
must be positive, otherwise IllegalArgumentException is thrown.'''Emits when''' the specified number of elements has been accumulated or upstream completed
'''Backpressures when''' a group has been assembled and downstream backpressures
'''Completes when''' upstream completes
'''Cancels when''' downstream cancels
- Parameters:
n
- (undocumented)- Returns:
- (undocumented)
-
limit
public Flow<In,Out,Mat> limit(long n)
Ensure stream boundedness by limiting the number of elements from upstream. If the number of incoming elements exceeds max, it will signal upstream failureStreamLimitException
downstream.Due to input buffering some elements may have been requested from upstream publishers that will then not be processed downstream of this step.
The stream will be completed without producing any elements if
n
is zero or negative.'''Emits when''' the specified number of elements to take has not yet been reached
'''Backpressures when''' downstream backpressures
'''Completes when''' the defined number of elements has been taken or upstream completes
'''Errors when''' the total number of incoming element exceeds max
'''Cancels when''' the defined number of elements has been taken or downstream cancels
See also
Flow.take
,Flow.takeWithin
,Flow.takeWhile
- Parameters:
n
- (undocumented)- Returns:
- (undocumented)
-
limitWeighted
public Flow<In,Out,Mat> limitWeighted(long n, Function<Out,java.lang.Long> costFn)
Ensure stream boundedness by evaluating the cost of incoming elements using a cost function. Exactly how many elements will be allowed to travel downstream depends on the evaluated cost of each element. If the accumulated cost exceeds max, it will signal upstream failureStreamLimitException
downstream.Due to input buffering some elements may have been requested from upstream publishers that will then not be processed downstream of this step.
The stream will be completed without producing any elements if
n
is zero or negative.Adheres to the
ActorAttributes.SupervisionStrategy
attribute.'''Emits when''' the specified number of elements to take has not yet been reached
'''Backpressures when''' downstream backpressures
'''Completes when''' the defined number of elements has been taken or upstream completes
'''Errors when''' when the accumulated cost exceeds max
'''Cancels when''' the defined number of elements has been taken or downstream cancels
See also
Flow.take
,Flow.takeWithin
,Flow.takeWhile
- Parameters:
n
- (undocumented)costFn
- (undocumented)- Returns:
- (undocumented)
-
sliding
public Flow<In,java.util.List<Out>,Mat> sliding(int n, int step)
Apply a sliding window over the stream and return the windows as groups of elements, with the last group possibly smaller than requested due to end-of-stream.n
must be positive, otherwise IllegalArgumentException is thrown.step
must be positive, otherwise IllegalArgumentException is thrown.'''Emits when''' enough elements have been collected within the window or upstream completed
'''Backpressures when''' a window has been assembled and downstream backpressures
'''Completes when''' upstream completes
'''Cancels when''' downstream cancels
- Parameters:
n
- (undocumented)step
- (undocumented)- Returns:
- (undocumented)
-
sliding$default$2
public int sliding$default$2()
-
scan
public <T> Flow<In,T,Mat> scan(T zero, Function2<T,Out,T> f)
Similar tofold
but is not a terminal operation, emits its current value which starts atzero
and then applies the current and next value to the given functionf
, emitting the next current value.If the function
f
throws an exception and the supervision decision isSupervision.restart()
current value starts atzero
again the stream will continue.Adheres to the
ActorAttributes.SupervisionStrategy
attribute.Note that the
zero
value must be immutable.'''Emits when''' the function scanning the element returns a new element
'''Backpressures when''' downstream backpressures
'''Completes when''' upstream completes
'''Cancels when''' downstream cancels
- Parameters:
zero
- (undocumented)f
- (undocumented)- Returns:
- (undocumented)
-
scanAsync
public <T> Flow<In,T,Mat> scanAsync(T zero, Function2<T,Out,java.util.concurrent.CompletionStage<T>> f)
Similar toscan
but with a asynchronous function, emits its current value which starts atzero
and then applies the current and next value to the given functionf
, emitting aFuture
that resolves to the next current value.If the function
f
throws an exception and the supervision decision isakka.stream.Supervision.Restart
current value starts atzero
again the stream will continue.If the function
f
throws an exception and the supervision decision isakka.stream.Supervision.Resume
current value starts at the previous current value, or zero when it doesn't have one, and the stream will continue.Adheres to the
ActorAttributes.SupervisionStrategy
attribute.Note that the
zero
value must be immutable.'''Emits when''' the future returned by f
completes
'''Backpressures when''' downstream backpressures
'''Completes when''' upstream completes and the last future returned by
f
completes'''Cancels when''' downstream cancels
See also
FlowOps.scan
- Parameters:
zero
- (undocumented)f
- (undocumented)- Returns:
- (undocumented)
-
fold
public <T> Flow<In,T,Mat> fold(T zero, Function2<T,Out,T> f)
Similar toscan
but only emits its result when the upstream completes, after which it also completes. Applies the given functionf
towards its current and next value, yielding the next current value.Adheres to the
ActorAttributes.SupervisionStrategy
attribute.If the function
f
throws an exception and the supervision decision isSupervision.restart()
current value starts atzero
again the stream will continue.Note that the
zero
value must be immutable.'''Emits when''' upstream completes
'''Backpressures when''' downstream backpressures
'''Completes when''' upstream completes
'''Cancels when''' downstream cancels
- Parameters:
zero
- (undocumented)f
- (undocumented)- Returns:
- (undocumented)
-
foldAsync
public <T> Flow<In,T,Mat> foldAsync(T zero, Function2<T,Out,java.util.concurrent.CompletionStage<T>> f)
Similar tofold
but with an asynchronous function. Applies the given function towards its current and next value, yielding the next current value.Adheres to the
ActorAttributes.SupervisionStrategy
attribute.If the function
f
returns a failure and the supervision decision isakka.stream.Supervision.Restart
current value starts atzero
again the stream will continue.Note that the
zero
value must be immutable.'''Emits when''' upstream completes
'''Backpressures when''' downstream backpressures
'''Completes when''' upstream completes
'''Cancels when''' downstream cancels
- Parameters:
zero
- (undocumented)f
- (undocumented)- Returns:
- (undocumented)
-
reduce
public Flow<In,Out,Mat> reduce(Function2<Out,Out,Out> f)
Similar tofold
but uses first element as zero element. Applies the given function towards its current and next value, yielding the next current value.If the stream is empty (i.e. completes before signalling any elements), the reduce operator will fail its downstream with a
NoSuchElementException
, which is semantically in-line with that Scala's standard library collections do in such situations.Adheres to the
ActorAttributes.SupervisionStrategy
attribute.'''Emits when''' upstream completes
'''Backpressures when''' downstream backpressures
'''Completes when''' upstream completes
'''Cancels when''' downstream cancels
- Parameters:
f
- (undocumented)- Returns:
- (undocumented)
-
intersperse
public Flow<In,Out,Mat> intersperse(Out start, Out inject, Out end)
Intersperses stream with provided element, similar to howscala.collection.immutable.List.mkString
injects a separator between a List's elements.Additionally can inject start and end marker elements to stream.
Examples:
Source<Integer, ?> nums = Source.from(Arrays.asList(0, 1, 2, 3)); nums.intersperse(","); // 1 , 2 , 3 nums.intersperse("[", ",", "]"); // [ 1 , 2 , 3 ]
In case you want to only prepend or only append an element (yet still use the
intercept
feature to inject a separator between elements, you may want to use the following pattern instead of the 3-argument version of intersperse (SeeSource.concat
for semantics details):Source.single(">> ").concat(flow.intersperse(",")) flow.intersperse(",").concat(Source.single("END"))
'''Emits when''' upstream emits (or before with the
start
element if provided)'''Backpressures when''' downstream backpressures
'''Completes when''' upstream completes
'''Cancels when''' downstream cancels
- Parameters:
start
- (undocumented)inject
- (undocumented)end
- (undocumented)- Returns:
- (undocumented)
-
intersperse
public Flow<In,Out,Mat> intersperse(Out inject)
Intersperses stream with provided element, similar to howscala.collection.immutable.List.mkString
injects a separator between a List's elements.Additionally can inject start and end marker elements to stream.
Examples:
Source<Integer, ?> nums = Source.from(Arrays.asList(0, 1, 2, 3)); nums.intersperse(","); // 1 , 2 , 3 nums.intersperse("[", ",", "]"); // [ 1 , 2 , 3 ]
'''Emits when''' upstream emits (or before with the
start
element if provided)'''Backpressures when''' downstream backpressures
'''Completes when''' upstream completes
'''Cancels when''' downstream cancels
- Parameters:
inject
- (undocumented)- Returns:
- (undocumented)
-
groupedWithin
public Flow<In,java.util.List<Out>,Mat> groupedWithin(int n, scala.concurrent.duration.FiniteDuration d)
Deprecated.Use the overloaded one which accepts java.time.Duration instead. Since 2.5.12.Chunk up this stream into groups of elements received within a time window, or limited by the given number of elements, whatever happens first. Empty groups will not be emitted if no elements are received from upstream. The last group before end-of-stream will contain the buffered elements since the previously emitted group.'''Emits when''' the configured time elapses since the last group has been emitted or
n
elements is buffered'''Backpressures when''' downstream backpressures, and there are
n+1
buffered elements'''Completes when''' upstream completes (emits last group)
'''Cancels when''' downstream completes
n
must be positive, andd
must be greater than 0 seconds, otherwise IllegalArgumentException is thrown.- Parameters:
n
- (undocumented)d
- (undocumented)- Returns:
- (undocumented)
-
groupedWithin
public Flow<In,java.util.List<Out>,Mat> groupedWithin(int n, java.time.Duration d)
Chunk up this stream into groups of elements received within a time window, or limited by the given number of elements, whatever happens first. Empty groups will not be emitted if no elements are received from upstream. The last group before end-of-stream will contain the buffered elements since the previously emitted group.'''Emits when''' the configured time elapses since the last group has been emitted or
n
elements is buffered'''Backpressures when''' downstream backpressures, and there are
n+1
buffered elements'''Completes when''' upstream completes (emits last group)
'''Cancels when''' downstream completes
n
must be positive, andd
must be greater than 0 seconds, otherwise IllegalArgumentException is thrown.- Parameters:
n
- (undocumented)d
- (undocumented)- Returns:
- (undocumented)
-
groupedWeightedWithin
public Flow<In,java.util.List<Out>,Mat> groupedWeightedWithin(long maxWeight, Function<Out,java.lang.Long> costFn, scala.concurrent.duration.FiniteDuration d)
Deprecated.Use the overloaded one which accepts java.time.Duration instead. Since 2.5.12.Chunk up this stream into groups of elements received within a time window, or limited by the weight of the elements, whatever happens first. Empty groups will not be emitted if no elements are received from upstream. The last group before end-of-stream will contain the buffered elements since the previously emitted group.'''Emits when''' the configured time elapses since the last group has been emitted or weight limit reached
'''Backpressures when''' downstream backpressures, and buffered group (+ pending element) weighs more than
maxWeight
'''Completes when''' upstream completes (emits last group)
'''Cancels when''' downstream completes
maxWeight
must be positive, andd
must be greater than 0 seconds, otherwise IllegalArgumentException is thrown.- Parameters:
maxWeight
- (undocumented)costFn
- (undocumented)d
- (undocumented)- Returns:
- (undocumented)
-
groupedWeightedWithin
public Flow<In,java.util.List<Out>,Mat> groupedWeightedWithin(long maxWeight, Function<Out,java.lang.Long> costFn, java.time.Duration d)
Chunk up this stream into groups of elements received within a time window, or limited by the weight of the elements, whatever happens first. Empty groups will not be emitted if no elements are received from upstream. The last group before end-of-stream will contain the buffered elements since the previously emitted group.'''Emits when''' the configured time elapses since the last group has been emitted or weight limit reached
'''Backpressures when''' downstream backpressures, and buffered group (+ pending element) weighs more than
maxWeight
'''Completes when''' upstream completes (emits last group)
'''Cancels when''' downstream completes
maxWeight
must be positive, andd
must be greater than 0 seconds, otherwise IllegalArgumentException is thrown.- Parameters:
maxWeight
- (undocumented)costFn
- (undocumented)d
- (undocumented)- Returns:
- (undocumented)
-
delay
public Flow<In,Out,Mat> delay(scala.concurrent.duration.FiniteDuration of, DelayOverflowStrategy strategy)
Deprecated.Use the overloaded one which accepts java.time.Duration instead. Since 2.5.12.Shifts elements emission in time by a specified amount. It allows to store elements in internal buffer while waiting for next element to be emitted. Depending on the definedDelayOverflowStrategy
it might drop elements or backpressure the upstream if there is no space available in the buffer.Delay precision is 10ms to avoid unnecessary timer scheduling cycles
Internal buffer has default capacity 16. You can set buffer size by calling
addAttributes(inputBuffer)
'''Emits when''' there is a pending element in the buffer and configured time for this element elapsed * EmitEarly - strategy do not wait to emit element if buffer is full
'''Backpressures when''' depending on OverflowStrategy * Backpressure - backpressures when buffer is full * DropHead, DropTail, DropBuffer - never backpressures * Fail - fails the stream if buffer gets full
'''Completes when''' upstream completes and buffered elements have been drained
'''Cancels when''' downstream cancels
- Parameters:
of
- time to shift all messagesstrategy
- Strategy that is used when incoming elements cannot fit inside the buffer- Returns:
- (undocumented)
-
delay
public Flow<In,Out,Mat> delay(java.time.Duration of, DelayOverflowStrategy strategy)
Shifts elements emission in time by a specified amount. It allows to store elements in internal buffer while waiting for next element to be emitted. Depending on the definedDelayOverflowStrategy
it might drop elements or backpressure the upstream if there is no space available in the buffer.Delay precision is 10ms to avoid unnecessary timer scheduling cycles
Internal buffer has default capacity 16. You can set buffer size by calling
addAttributes(inputBuffer)
'''Emits when''' there is a pending element in the buffer and configured time for this element elapsed * EmitEarly - strategy do not wait to emit element if buffer is full
'''Backpressures when''' depending on OverflowStrategy * Backpressure - backpressures when buffer is full * DropHead, DropTail, DropBuffer - never backpressures * Fail - fails the stream if buffer gets full
'''Completes when''' upstream completes and buffered elements have been drained
'''Cancels when''' downstream cancels
- Parameters:
of
- time to shift all messagesstrategy
- Strategy that is used when incoming elements cannot fit inside the buffer- Returns:
- (undocumented)
-
drop
public Flow<In,Out,Mat> drop(long n)
Discard the given number of elements at the beginning of the stream. No elements will be dropped ifn
is zero or negative.'''Emits when''' the specified number of elements has been dropped already
'''Backpressures when''' the specified number of elements has been dropped and downstream backpressures
'''Completes when''' upstream completes
'''Cancels when''' downstream cancels
- Parameters:
n
- (undocumented)- Returns:
- (undocumented)
-
dropWithin
public Flow<In,Out,Mat> dropWithin(scala.concurrent.duration.FiniteDuration d)
Deprecated.Use the overloaded one which accepts java.time.Duration instead. Since 2.5.12.Discard the elements received within the given duration at beginning of the stream.'''Emits when''' the specified time elapsed and a new upstream element arrives
'''Backpressures when''' downstream backpressures
'''Completes when''' upstream completes
'''Cancels when''' downstream cancels
- Parameters:
d
- (undocumented)- Returns:
- (undocumented)
-
dropWithin
public Flow<In,Out,Mat> dropWithin(java.time.Duration d)
Discard the elements received within the given duration at beginning of the stream.'''Emits when''' the specified time elapsed and a new upstream element arrives
'''Backpressures when''' downstream backpressures
'''Completes when''' upstream completes
'''Cancels when''' downstream cancels
- Parameters:
d
- (undocumented)- Returns:
- (undocumented)
-
takeWhile
public Flow<In,Out,Mat> takeWhile(Predicate<Out> p, boolean inclusive)
Terminate processing (and cancel the upstream publisher) after predicate returns false for the first time. When inclusive istrue
, include the element for which the predicate returnedfalse
. Due to input buffering some elements may have been requested from upstream publishers that will then not be processed downstream of this step.The stream will be completed without producing any elements if predicate is false for the first stream element.
Adheres to the
ActorAttributes.SupervisionStrategy
attribute.'''Emits when''' the predicate is true
'''Backpressures when''' downstream backpressures
'''Completes when''' predicate returned false (or 1 after predicate returns false if
inclusive
or upstream completes'''Cancels when''' predicate returned false or downstream cancels
See also
Flow.limit
,Flow.limitWeighted
- Parameters:
p
- (undocumented)inclusive
- (undocumented)- Returns:
- (undocumented)
-
takeWhile
public Flow<In,Out,Mat> takeWhile(Predicate<Out> p)
Terminate processing (and cancel the upstream publisher) after predicate returns false for the first time. When inclusive istrue
, include the element for which the predicate returnedfalse
. Due to input buffering some elements may have been requested from upstream publishers that will then not be processed downstream of this step.The stream will be completed without producing any elements if predicate is false for the first stream element.
'''Emits when''' the predicate is true
'''Backpressures when''' downstream backpressures
'''Completes when''' predicate returned false (or 1 after predicate returns false if
inclusive
or upstream completes'''Cancels when''' predicate returned false or downstream cancels
See also
Flow.limit
,Flow.limitWeighted
- Parameters:
p
- (undocumented)- Returns:
- (undocumented)
-
dropWhile
public Flow<In,Out,Mat> dropWhile(Predicate<Out> p)
Discard elements at the beginning of the stream while predicate is true. All elements will be taken after predicate returns false first time.Adheres to the
ActorAttributes.SupervisionStrategy
attribute.'''Emits when''' predicate returned false and for all following stream elements
'''Backpressures when''' predicate returned false and downstream backpressures
'''Completes when''' upstream completes
'''Cancels when''' downstream cancels
- Parameters:
p
- (undocumented)- Returns:
- (undocumented)
-
recover
public Flow<In,Out,Mat> recover(scala.PartialFunction<java.lang.Throwable,Out> pf)
Deprecated.Use recoverWithRetries instead. Since 2.4.4.Recover allows to send last element on failure and gracefully complete the stream Since the underlying failure signal onError arrives out-of-band, it might jump over existing elements. This operator can recover the failure signal, but not the skipped elements, which will be dropped.Throwing an exception inside
recover
_will_ be logged on ERROR level automatically.'''Emits when''' element is available from the upstream or upstream is failed and pf returns an element
'''Backpressures when''' downstream backpressures
'''Completes when''' upstream completes or upstream failed with exception pf can handle
'''Cancels when''' downstream cancels
- Parameters:
pf
- (undocumented)- Returns:
- (undocumented)
-
recover
public Flow<In,Out,Mat> recover(java.lang.Class<? extends java.lang.Throwable> clazz, java.util.function.Supplier<Out> supplier)
Deprecated.Use recoverWithRetries instead. Since 2.4.4.Recover allows to send last element on failure and gracefully complete the stream Since the underlying failure signal onError arrives out-of-band, it might jump over existing elements. This operator can recover the failure signal, but not the skipped elements, which will be dropped.Throwing an exception inside
recover
_will_ be logged on ERROR level automatically.'''Emits when''' element is available from the upstream or upstream is failed and pf returns an element
'''Backpressures when''' downstream backpressures
'''Completes when''' upstream completes or upstream failed with exception pf can handle
'''Cancels when''' downstream cancels
- Parameters:
clazz
- (undocumented)supplier
- (undocumented)- Returns:
- (undocumented)
-
mapError
public Flow<In,Out,Mat> mapError(scala.PartialFunction<java.lang.Throwable,java.lang.Throwable> pf)
While similar torecover(scala.PartialFunction<java.lang.Throwable,Out>)
this operator can be used to transform an error signal to a different one *without* logging it as an error in the process. So in that sense it is NOT exactly equivalent torecover(t => throw t2)
since recover would log thet2
error.Since the underlying failure signal onError arrives out-of-band, it might jump over existing elements. This operator can recover the failure signal, but not the skipped elements, which will be dropped.
Similarly to
recover(scala.PartialFunction<java.lang.Throwable,Out>)
throwing an exception insidemapError
_will_ be logged.'''Emits when''' element is available from the upstream or upstream is failed and pf returns an element
'''Backpressures when''' downstream backpressures
'''Completes when''' upstream completes or upstream failed with exception pf can handle
'''Cancels when''' downstream cancels
- Parameters:
pf
- (undocumented)- Returns:
- (undocumented)
-
recoverWith
public Flow<In,Out,Mat> recoverWith(scala.PartialFunction<java.lang.Throwable,? extends Graph<SourceShape<Out>,NotUsed>> pf)
RecoverWith allows to switch to alternative Source on flow failure. It will stay in effect after a failure has been recovered so that each time there is a failure it is fed into thepf
and a new Source may be materialized.Since the underlying failure signal onError arrives out-of-band, it might jump over existing elements. This operator can recover the failure signal, but not the skipped elements, which will be dropped.
Throwing an exception inside
recoverWith
_will_ be logged on ERROR level automatically.'''Emits when''' element is available from the upstream or upstream is failed and element is available from alternative Source
'''Backpressures when''' downstream backpressures
'''Completes when''' upstream completes or upstream failed with exception pf can handle
'''Cancels when''' downstream cancels
- Parameters:
pf
- (undocumented)- Returns:
- (undocumented)
-
recoverWith
public Flow<In,Out,Mat> recoverWith(java.lang.Class<? extends java.lang.Throwable> clazz, java.util.function.Supplier<Graph<SourceShape<Out>,NotUsed>> supplier)
RecoverWith allows to switch to alternative Source on flow failure. It will stay in effect after a failure has been recovered so that each time there is a failure it is fed into thepf
and a new Source may be materialized.Since the underlying failure signal onError arrives out-of-band, it might jump over existing elements. This operator can recover the failure signal, but not the skipped elements, which will be dropped.
Throwing an exception inside
recoverWith
_will_ be logged on ERROR level automatically.'''Emits when''' element is available from the upstream or upstream is failed and element is available from alternative Source
'''Backpressures when''' downstream backpressures
'''Completes when''' upstream completes or upstream failed with exception pf can handle
'''Cancels when''' downstream cancels
- Parameters:
clazz
- (undocumented)supplier
- (undocumented)- Returns:
- (undocumented)
-
recoverWithRetries
public Flow<In,Out,Mat> recoverWithRetries(int attempts, scala.PartialFunction<java.lang.Throwable,Graph<SourceShape<Out>,NotUsed>> pf)
RecoverWithRetries allows to switch to alternative Source on flow failure. It will stay in effect after a failure has been recovered up toattempts
number of times so that each time there is a failure it is fed into thepf
and a new Source may be materialized. Note that if you pass in 0, this won't attempt to recover at all.A negative
attempts
number is interpreted as "infinite", which results in the exact same behavior asrecoverWith
.Since the underlying failure signal onError arrives out-of-band, it might jump over existing elements. This operator can recover the failure signal, but not the skipped elements, which will be dropped.
Throwing an exception inside
recoverWithRetries
_will_ be logged on ERROR level automatically.'''Emits when''' element is available from the upstream or upstream is failed and element is available from alternative Source
'''Backpressures when''' downstream backpressures
'''Completes when''' upstream completes or upstream failed with exception pf can handle
'''Cancels when''' downstream cancels
- Parameters:
attempts
- Maximum number of retries or -1 to retry indefinitelypf
- Receives the failure cause and returns the new Source to be materialized if any- Returns:
- (undocumented)
-
recoverWithRetries
public Flow<In,Out,Mat> recoverWithRetries(int attempts, java.lang.Class<? extends java.lang.Throwable> clazz, java.util.function.Supplier<Graph<SourceShape<Out>,NotUsed>> supplier)
RecoverWithRetries allows to switch to alternative Source on flow failure. It will stay in effect after a failure has been recovered up toattempts
number of times so that each time there is a failure it is fed into thepf
and a new Source may be materialized. Note that if you pass in 0, this won't attempt to recover at all.A negative
attempts
number is interpreted as "infinite", which results in the exact same behavior asrecoverWith
.Since the underlying failure signal onError arrives out-of-band, it might jump over existing elements. This operator can recover the failure signal, but not the skipped elements, which will be dropped.
Throwing an exception inside
recoverWithRetries
_will_ be logged on ERROR level automatically.'''Emits when''' element is available from the upstream or upstream is failed and element is available from alternative Source
'''Backpressures when''' downstream backpressures
'''Completes when''' upstream completes or upstream failed with exception pf can handle
'''Cancels when''' downstream cancels
- Parameters:
attempts
- Maximum number of retries or -1 to retry indefinitelyclazz
- the class object of the failure causesupplier
- supply the new Source to be materialized- Returns:
- (undocumented)
-
take
public Flow<In,Out,Mat> take(long n)
Terminate processing (and cancel the upstream publisher) after the given number of elements. Due to input buffering some elements may have been requested from upstream publishers that will then not be processed downstream of this step.The stream will be completed without producing any elements if
n
is zero or negative.'''Emits when''' the specified number of elements to take has not yet been reached
'''Backpressures when''' downstream backpressures
'''Completes when''' the defined number of elements has been taken or upstream completes
'''Cancels when''' the defined number of elements has been taken or downstream cancels
See also
Flow.limit
,Flow.limitWeighted
- Parameters:
n
- (undocumented)- Returns:
- (undocumented)
-
takeWithin
public Flow<In,Out,Mat> takeWithin(scala.concurrent.duration.FiniteDuration d)
Deprecated.Use the overloaded one which accepts java.time.Duration instead. Since 2.5.12.Terminate processing (and cancel the upstream publisher) after the given duration. Due to input buffering some elements may have been requested from upstream publishers that will then not be processed downstream of this step.Note that this can be combined with
take(long)
to limit the number of elements within the duration.'''Emits when''' an upstream element arrives
'''Backpressures when''' downstream backpressures
'''Completes when''' upstream completes or timer fires
'''Cancels when''' downstream cancels or timer fires
See also
Flow.limit
,Flow.limitWeighted
- Parameters:
d
- (undocumented)- Returns:
- (undocumented)
-
takeWithin
public Flow<In,Out,Mat> takeWithin(java.time.Duration d)
Terminate processing (and cancel the upstream publisher) after the given duration. Due to input buffering some elements may have been requested from upstream publishers that will then not be processed downstream of this step.Note that this can be combined with
take(long)
to limit the number of elements within the duration.'''Emits when''' an upstream element arrives
'''Backpressures when''' downstream backpressures
'''Completes when''' upstream completes or timer fires
'''Cancels when''' downstream cancels or timer fires
See also
Flow.limit
,Flow.limitWeighted
- Parameters:
d
- (undocumented)- Returns:
- (undocumented)
-
conflateWithSeed
public <S> Flow<In,S,Mat> conflateWithSeed(Function<Out,S> seed, Function2<S,Out,S> aggregate)
Allows a faster upstream to progress independently of a slower subscriber by conflating elements into a summary until the subscriber is ready to accept them. For example a conflate step might average incoming numbers if the upstream publisher is faster.This version of conflate allows to derive a seed from the first element and change the aggregated type to be different than the input type. See
Flow.conflate
for a simpler version that does not change types.This element only rolls up elements if the upstream is faster, but if the downstream is faster it will not duplicate elements.
Adheres to the
ActorAttributes.SupervisionStrategy
attribute.'''Emits when''' downstream stops backpressuring and there is a conflated element available
'''Backpressures when''' never
'''Completes when''' upstream completes
'''Cancels when''' downstream cancels
see also
Flow.conflate
Flow.batch
Flow.batchWeighted
- Parameters:
seed
- Provides the first state for a conflated value using the first unconsumed element as a startaggregate
- Takes the currently aggregated value and the current pending element to produce a new aggregate- Returns:
- (undocumented)
-
conflate
public Flow<In,Out,Mat> conflate(Function2<Out,Out,Out> aggregate)
Allows a faster upstream to progress independently of a slower subscriber by conflating elements into a summary until the subscriber is ready to accept them. For example a conflate step might average incoming numbers if the upstream publisher is faster.This version of conflate does not change the output type of the stream. See
Flow.conflateWithSeed
for a more flexible version that can take a seed function and transform elements while rolling up.This element only rolls up elements if the upstream is faster, but if the downstream is faster it will not duplicate elements.
Adheres to the
ActorAttributes.SupervisionStrategy
attribute.'''Emits when''' downstream stops backpressuring and there is a conflated element available
'''Backpressures when''' never
'''Completes when''' upstream completes
'''Cancels when''' downstream cancels
see also
Flow.conflateWithSeed
Flow.batch
Flow.batchWeighted
- Parameters:
aggregate
- Takes the currently aggregated value and the current pending element to produce a new aggregate- Returns:
- (undocumented)
-
batch
public <S> Flow<In,S,Mat> batch(long max, Function<Out,S> seed, Function2<S,Out,S> aggregate)
Allows a faster upstream to progress independently of a slower subscriber by aggregating elements into batches until the subscriber is ready to accept them. For example a batch step might store received elements in an array up to the allowed max limit if the upstream publisher is faster.This element only rolls up elements if the upstream is faster, but if the downstream is faster it will not duplicate elements.
Adheres to the
ActorAttributes.SupervisionStrategy
attribute.'''Emits when''' downstream stops backpressuring and there is an aggregated element available
'''Backpressures when''' there are
max
batched elements and 1 pending element and downstream backpressures'''Completes when''' upstream completes and there is no batched/pending element waiting
'''Cancels when''' downstream cancels
See also
Flow.conflate
,Flow.batchWeighted
- Parameters:
max
- maximum number of elements to batch before backpressuring upstream (must be positive non-zero)seed
- Provides the first state for a batched value using the first unconsumed element as a startaggregate
- Takes the currently batched value and the current pending element to produce a new aggregate- Returns:
- (undocumented)
-
batchWeighted
public <S> Flow<In,S,Mat> batchWeighted(long max, Function<Out,java.lang.Long> costFn, Function<Out,S> seed, Function2<S,Out,S> aggregate)
Allows a faster upstream to progress independently of a slower subscriber by aggregating elements into batches until the subscriber is ready to accept them. For example a batch step might concatenateByteString
elements up to the allowed max limit if the upstream publisher is faster.This element only rolls up elements if the upstream is faster, but if the downstream is faster it will not duplicate elements.
Batching will apply for all elements, even if a single element cost is greater than the total allowed limit. In this case, previous batched elements will be emitted, then the "heavy" element will be emitted (after being applied with the
seed
function) without batching further elements with it, and then the rest of the incoming elements are batched.'''Emits when''' downstream stops backpressuring and there is a batched element available
'''Backpressures when''' there are
max
weighted batched elements + 1 pending element and downstream backpressures'''Completes when''' upstream completes and there is no batched/pending element waiting
'''Cancels when''' downstream cancels
See also
Flow.conflate
,Flow.batch
- Parameters:
max
- maximum weight of elements to batch before backpressuring upstream (must be positive non-zero)costFn
- a function to compute a single element weightseed
- Provides the first state for a batched value using the first unconsumed element as a startaggregate
- Takes the currently batched value and the current pending element to produce a new batch- Returns:
- (undocumented)
-
expand
public <U> Flow<In,U,Mat> expand(Function<Out,java.util.Iterator<U>> expander)
Allows a faster downstream to progress independently of a slower upstream by extrapolating elements from an older element until new element comes from the upstream. For example an expand step might repeat the last element for the subscriber until it receives an update from upstream.This element will never "drop" upstream elements as all elements go through at least one extrapolation step. This means that if the upstream is actually faster than the upstream it will be backpressured by the downstream subscriber.
Expand does not support
Supervision.restart()
andSupervision.resume()
. Exceptions from theexpander
function will complete the stream with failure.See also
extrapolate(akka.japi.function.Function<Out, java.util.Iterator<Out>>)
for a version that always preserves the original element and allows for an initial "startup" element.'''Emits when''' downstream stops backpressuring
'''Backpressures when''' downstream backpressures or iterator runs empty
'''Completes when''' upstream completes
'''Cancels when''' downstream cancels
- Parameters:
expander
- Takes the current extrapolation state to produce an output element and the next extrapolation state.- Returns:
- (undocumented)
- See Also:
extrapolate(akka.japi.function.Function<Out, java.util.Iterator<Out>>)
-
extrapolate
public Flow<In,Out,Mat> extrapolate(Function<Out,java.util.Iterator<Out>> extrapolator)
Allows a faster downstream to progress independent of a slower upstream.This is achieved by introducing "extrapolated" elements - based on those from upstream - whenever downstream signals demand.
Extrapolate does not support
Supervision.restart()
andSupervision.resume()
. Exceptions from theextrapolate
function will complete the stream with failure.See also
expand(akka.japi.function.Function<Out, java.util.Iterator<U>>)
for a version that can overwrite the original element.'''Emits when''' downstream stops backpressuring, AND EITHER upstream emits OR initial element is present OR
extrapolate
is non-empty and applicable'''Backpressures when''' downstream backpressures or current
extrapolate
runs empty'''Completes when''' upstream completes and current
extrapolate
runs empty'''Cancels when''' downstream cancels
- Parameters:
extrapolator
- Takes the current upstream element and provides a sequence of "extrapolated" elements based on the original, to be emitted in case downstream signals demand.- Returns:
- (undocumented)
- See Also:
expand(akka.japi.function.Function<Out, java.util.Iterator<U>>)
-
extrapolate
public Flow<In,Out,Mat> extrapolate(Function<Out,java.util.Iterator<Out>> extrapolator, Out initial)
Allows a faster downstream to progress independent of a slower upstream.This is achieved by introducing "extrapolated" elements - based on those from upstream - whenever downstream signals demand.
Extrapolate does not support
Supervision.restart()
andSupervision.resume()
. Exceptions from theextrapolate
function will complete the stream with failure.See also
expand(akka.japi.function.Function<Out, java.util.Iterator<U>>)
for a version that can overwrite the original element.'''Emits when''' downstream stops backpressuring, AND EITHER upstream emits OR initial element is present OR
extrapolate
is non-empty and applicable'''Backpressures when''' downstream backpressures or current
extrapolate
runs empty'''Completes when''' upstream completes and current
extrapolate
runs empty'''Cancels when''' downstream cancels
- Parameters:
extrapolator
- Takes the current upstream element and provides a sequence of "extrapolated" elements based on the original, to be emitted in case downstream signals demand.initial
- The initial element to be emitted, in case upstream is able to stall the entire stream.- Returns:
- (undocumented)
- See Also:
expand(akka.japi.function.Function<Out, java.util.Iterator<U>>)
-
buffer
public Flow<In,Out,Mat> buffer(int size, OverflowStrategy overflowStrategy)
Adds a fixed size buffer in the flow that allows to store elements from a faster upstream until it becomes full. Depending on the definedOverflowStrategy
it might drop elements or backpressure the upstream if there is no space available'''Emits when''' downstream stops backpressuring and there is a pending element in the buffer
'''Backpressures when''' downstream backpressures or depending on OverflowStrategy:
- Backpressure - backpressures when buffer is full
- DropHead, DropTail, DropBuffer - never backpressures
- Fail - fails the stream if buffer gets full
'''Completes when''' upstream completes and buffered elements have been drained
'''Cancels when''' downstream cancels
- Parameters:
size
- The size of the buffer in element countoverflowStrategy
- Strategy that is used when incoming elements cannot fit inside the buffer- Returns:
- (undocumented)
-
prefixAndTail
public Flow<In,Pair<java.util.List<Out>,Source<Out,NotUsed>>,Mat> prefixAndTail(int n)
Takes up ton
elements from the stream (less thann
if the upstream completes before emittingn
elements) and returns a pair containing a strict sequence of the taken element and a stream representing the remaining elements. If ''n'' is zero or negative, then this will return a pair of an empty collection and a stream containing the whole upstream unchanged.In case of an upstream error, depending on the current state - the master stream signals the error if less than
n
elements have been seen, and therefore the substream has not yet been emitted - the tail substream signals the error after the prefix and tail has been emitted by the main stream (at that point the main stream has already completed)'''Emits when''' the configured number of prefix elements are available. Emits this prefix, and the rest as a substream
'''Backpressures when''' downstream backpressures or substream backpressures
'''Completes when''' prefix elements have been consumed and substream has been consumed
'''Cancels when''' downstream cancels or substream cancels
- Parameters:
n
- (undocumented)- Returns:
- (undocumented)
-
groupBy
public <K> SubFlow<In,Out,Mat> groupBy(int maxSubstreams, Function<Out,K> f, boolean allowClosedSubstreamRecreation)
This operation demultiplexes the incoming stream into separate output streams, one for each element key. The key is computed for each element using the given function. When a new key is encountered for the first time a new substream is opened and subsequently fed with all elements belonging to that key.WARNING: If
allowClosedSubstreamRecreation
is set tofalse
(default behavior) the operator keeps track of all keys of streams that have already been closed. If you expect an infinite number of keys this can cause memory issues. Elements belonging to those keys are drained directly and not send to the substream.Note: If
allowClosedSubstreamRecreation
is set totrue
substream completion and incoming elements are subject to race-conditions. If elements arrive for a stream that is in the process of closing these elements might get lost.The object returned from this method is not a normal
Flow
, it is aSubFlow
. This means that after this operator all transformations are applied to all encountered substreams in the same fashion. Substream mode is exited either by closing the substream (i.e. connecting it to aSink
) or by merging the substreams back together; see theto
andmergeBack
methods onSubFlow
for more information.It is important to note that the substreams also propagate back-pressure as any other stream, which means that blocking one substream will block the
groupBy
operator itself—and thereby all substreams—once all internal or explicit buffers are filled.If the group by function
f
throws an exception and the supervision decision isSupervision.stop()
the stream and substreams will be completed with failure.If the group by function
f
throws an exception and the supervision decision isSupervision.resume()
orSupervision.restart()
the element is dropped and the stream and substreams continue.Function
f
MUST NOT returnnull
. This will throw exception and trigger supervision decision mechanism.'''Emits when''' an element for which the grouping function returns a group that has not yet been created. Emits the new group
'''Backpressures when''' there is an element pending for a group whose substream backpressures
'''Completes when''' upstream completes
'''Cancels when''' downstream cancels and all substreams cancel
- Parameters:
maxSubstreams
- configures the maximum number of substreams (keys) that are supported; if more distinct keys are encountered then the stream failsf
- computes the key for each elementallowClosedSubstreamRecreation
- enables recreation of already closed substreams if elements with their corresponding keys arrive after completion- Returns:
- (undocumented)
-
groupBy
public <K> SubFlow<In,Out,Mat> groupBy(int maxSubstreams, Function<Out,K> f)
This operation demultiplexes the incoming stream into separate output streams, one for each element key. The key is computed for each element using the given function. When a new key is encountered for the first time a new substream is opened and subsequently fed with all elements belonging to that key.WARNING: The operator keeps track of all keys of streams that have already been closed. If you expect an infinite number of keys this can cause memory issues. Elements belonging to those keys are drained directly and not send to the substream.
- Parameters:
maxSubstreams
- (undocumented)f
- (undocumented)- Returns:
- (undocumented)
- See Also:
groupBy(int, akka.japi.function.Function<Out, K>, boolean)
-
splitWhen
public SubFlow<In,Out,Mat> splitWhen(Predicate<Out> p)
This operation applies the given predicate to all incoming elements and emits them to a stream of output streams, always beginning a new one with the current element if the given predicate returns true for it. This means that for the following series of predicate values, three substreams will be produced with lengths 1, 2, and 3:false, // element goes into first substream true, false, // elements go into second substream true, false, false // elements go into third substream
In case the *first* element of the stream matches the predicate, the first substream emitted by splitWhen will start from that element. For example:
true, false, false // first substream starts from the split-by element true, false // subsequent substreams operate the same way
The object returned from this method is not a normal
Flow
, it is aSubFlow
. This means that after this operator all transformations are applied to all encountered substreams in the same fashion. Substream mode is exited either by closing the substream (i.e. connecting it to aSink
) or by merging the substreams back together; see theto
andmergeBack
methods onSubFlow
for more information.It is important to note that the substreams also propagate back-pressure as any other stream, which means that blocking one substream will block the
splitWhen
operator itself—and thereby all substreams—once all internal or explicit buffers are filled.If the split predicate
p
throws an exception and the supervision decision isSupervision.stop()
the stream and substreams will be completed with failure.If the split predicate
p
throws an exception and the supervision decision isSupervision.resume()
orSupervision.restart()
the element is dropped and the stream and substreams continue.'''Emits when''' an element for which the provided predicate is true, opening and emitting a new substream for subsequent element
'''Backpressures when''' there is an element pending for the next substream, but the previous is not fully consumed yet, or the substream backpressures
'''Completes when''' upstream completes
'''Cancels when''' downstream cancels and substreams cancel on
SubstreamCancelStrategy.drain()
, downstream cancels or any substream cancels onSubstreamCancelStrategy.propagate()
See also
Flow.splitAfter
.- Parameters:
p
- (undocumented)- Returns:
- (undocumented)
-
splitWhen
public SubFlow<In,Out,Mat> splitWhen(SubstreamCancelStrategy substreamCancelStrategy, Predicate<Out> p)
This operation applies the given predicate to all incoming elements and emits them to a stream of output streams, always beginning a new one with the current element if the given predicate returns true for it.- Parameters:
substreamCancelStrategy
- (undocumented)p
- (undocumented)- Returns:
- (undocumented)
- See Also:
splitWhen(akka.japi.function.Predicate<Out>)
-
splitAfter
public SubFlow<In,Out,Mat> splitAfter(Predicate<Out> p)
This operation applies the given predicate to all incoming elements and emits them to a stream of output streams. It *ends* the current substream when the predicate is true. This means that for the following series of predicate values, three substreams will be produced with lengths 2, 2, and 3:false, true, // elements go into first substream false, true, // elements go into second substream false, false, true // elements go into third substream
The object returned from this method is not a normal
Flow
, it is aSubFlow
. This means that after this operator all transformations are applied to all encountered substreams in the same fashion. Substream mode is exited either by closing the substream (i.e. connecting it to aSink
) or by merging the substreams back together; see theto
andmergeBack
methods onSubFlow
for more information.It is important to note that the substreams also propagate back-pressure as any other stream, which means that blocking one substream will block the
splitAfter
operator itself—and thereby all substreams—once all internal or explicit buffers are filled.If the split predicate
p
throws an exception and the supervision decision isakka.stream.Supervision.Stop
the stream and substreams will be completed with failure.If the split predicate
p
throws an exception and the supervision decision isakka.stream.Supervision.Resume
orakka.stream.Supervision.Restart
the element is dropped and the stream and substreams continue.'''Emits when''' an element passes through. When the provided predicate is true it emits the element and opens a new substream for subsequent element
'''Backpressures when''' there is an element pending for the next substream, but the previous is not fully consumed yet, or the substream backpressures
'''Completes when''' upstream completes
'''Cancels when''' downstream cancels and substreams cancel on
SubstreamCancelStrategy.drain
, downstream cancels or any substream cancels onSubstreamCancelStrategy.propagate
See also
Flow.splitWhen
.- Parameters:
p
- (undocumented)- Returns:
- (undocumented)
-
splitAfter
public SubFlow<In,Out,Mat> splitAfter(SubstreamCancelStrategy substreamCancelStrategy, Predicate<Out> p)
This operation applies the given predicate to all incoming elements and emits them to a stream of output streams. It *ends* the current substream when the predicate is true.- Parameters:
substreamCancelStrategy
- (undocumented)p
- (undocumented)- Returns:
- (undocumented)
- See Also:
splitAfter(akka.japi.function.Predicate<Out>)
-
flatMapConcat
public <T,M> Flow<In,T,Mat> flatMapConcat(Function<Out,? extends Graph<SourceShape<T>,M>> f)
Transform each input element into aSource
of output elements that is then flattened into the output stream by concatenation, fully consuming one Source after the other.'''Emits when''' a currently consumed substream has an element available
'''Backpressures when''' downstream backpressures
'''Completes when''' upstream completes and all consumed substreams complete
'''Cancels when''' downstream cancels
- Parameters:
f
- (undocumented)- Returns:
- (undocumented)
-
flatMapMerge
public <T,M> Flow<In,T,Mat> flatMapMerge(int breadth, Function<Out,? extends Graph<SourceShape<T>,M>> f)
Transform each input element into aSource
of output elements that is then flattened into the output stream by merging, where at mostbreadth
substreams are being consumed at any given time.'''Emits when''' a currently consumed substream has an element available
'''Backpressures when''' downstream backpressures
'''Completes when''' upstream completes and all consumed substreams complete
'''Cancels when''' downstream cancels
- Parameters:
breadth
- (undocumented)f
- (undocumented)- Returns:
- (undocumented)
-
concat
public <M> Flow<In,Out,Mat> concat(Graph<SourceShape<Out>,M> that)
Concatenate the givenSource
to thisFlow
, meaning that once this Flow’s input is exhausted and all result elements have been generated, the Source’s elements will be produced.Note that the
Source
is materialized together with this Flow and just kept from producing elements by asserting back-pressure until its time comes.If this
Flow
gets upstream error - no elements from the givenSource
will be pulled.'''Emits when''' element is available from current stream or from the given
Source
when current is completed'''Backpressures when''' downstream backpressures
'''Completes when''' given
Source
completes'''Cancels when''' downstream cancels
- Parameters:
that
- (undocumented)- Returns:
- (undocumented)
-
concatMat
public <M,M2> Flow<In,Out,M2> concatMat(Graph<SourceShape<Out>,M> that, Function2<Mat,M,M2> matF)
Concatenate the givenSource
to thisFlow
, meaning that once this Flow’s input is exhausted and all result elements have been generated, the Source’s elements will be produced.Note that the
Source
is materialized together with this Flow and just kept from producing elements by asserting back-pressure until its time comes.If this
Flow
gets upstream error - no elements from the givenSource
will be pulled.It is recommended to use the internally optimized
Keep.left
andKeep.right
combiners where appropriate instead of manually writing functions that pass through one of the values.- Parameters:
that
- (undocumented)matF
- (undocumented)- Returns:
- (undocumented)
- See Also:
concat(akka.stream.Graph<akka.stream.SourceShape<Out>, M>)
-
prepend
public <M> Flow<In,Out,Mat> prepend(Graph<SourceShape<Out>,M> that)
Prepend the givenSource
to thisFlow
, meaning that before elements are generated from this Flow, the Source's elements will be produced until it is exhausted, at which point Flow elements will start being produced.Note that this Flow will be materialized together with the
Source
and just kept from producing elements by asserting back-pressure until its time comes.If the given
Source
gets upstream error - no elements from thisFlow
will be pulled.'''Emits when''' element is available from the given
Source
or from current stream when theSource
is completed'''Backpressures when''' downstream backpressures
'''Completes when''' this
Flow
completes'''Cancels when''' downstream cancels
- Parameters:
that
- (undocumented)- Returns:
- (undocumented)
-
prependMat
public <M,M2> Flow<In,Out,M2> prependMat(Graph<SourceShape<Out>,M> that, Function2<Mat,M,M2> matF)
Prepend the givenSource
to thisFlow
, meaning that before elements are generated from this Flow, the Source's elements will be produced until it is exhausted, at which point Flow elements will start being produced.Note that this Flow will be materialized together with the
Source
and just kept from producing elements by asserting back-pressure until its time comes.If the given
Source
gets upstream error - no elements from thisFlow
will be pulled.It is recommended to use the internally optimized
Keep.left
andKeep.right
combiners where appropriate instead of manually writing functions that pass through one of the values.- Parameters:
that
- (undocumented)matF
- (undocumented)- Returns:
- (undocumented)
- See Also:
prepend(akka.stream.Graph<akka.stream.SourceShape<Out>, M>)
-
orElse
public <M> Flow<In,Out,Mat> orElse(Graph<SourceShape<Out>,M> secondary)
Provides a secondary source that will be consumed if this source completes without any elements passing by. As soon as the first element comes through this stream, the alternative will be cancelled.Note that this Flow will be materialized together with the
Source
and just kept from producing elements by asserting back-pressure until its time comes or it gets cancelled.On errors the operator is failed regardless of source of the error.
'''Emits when''' element is available from first stream or first stream closed without emitting any elements and an element is available from the second stream
'''Backpressures when''' downstream backpressures
'''Completes when''' the primary stream completes after emitting at least one element, when the primary stream completes without emitting and the secondary stream already has completed or when the secondary stream completes
'''Cancels when''' downstream cancels and additionally the alternative is cancelled as soon as an element passes by from this stream.
- Parameters:
secondary
- (undocumented)- Returns:
- (undocumented)
-
orElseMat
public <M2,M3> Flow<In,Out,M3> orElseMat(Graph<SourceShape<Out>,M2> secondary, Function2<Mat,M2,M3> matF)
Provides a secondary source that will be consumed if this source completes without any elements passing by. As soon as the first element comes through this stream, the alternative will be cancelled.It is recommended to use the internally optimized
Keep.left
andKeep.right
combiners where appropriate instead of manually writing functions that pass through one of the values.- Parameters:
secondary
- (undocumented)matF
- (undocumented)- Returns:
- (undocumented)
- See Also:
orElse(akka.stream.Graph<akka.stream.SourceShape<Out>, M>)
-
alsoTo
public Flow<In,Out,Mat> alsoTo(Graph<SinkShape<Out>,?> that)
Attaches the givenSink
to thisFlow
, meaning that elements that passes through will also be sent to theSink
.It is similar to
wireTap(akka.japi.function.Procedure<Out>)
but will backpressure instead of dropping elements when the givenSink
is not ready.'''Emits when''' element is available and demand exists both from the Sink and the downstream.
'''Backpressures when''' downstream or Sink backpressures
'''Completes when''' upstream completes
'''Cancels when''' downstream or Sink cancels
- Parameters:
that
- (undocumented)- Returns:
- (undocumented)
-
alsoToMat
public <M2,M3> Flow<In,Out,M3> alsoToMat(Graph<SinkShape<Out>,M2> that, Function2<Mat,M2,M3> matF)
Attaches the givenSink
to thisFlow
, meaning that elements that passes through will also be sent to theSink
.It is similar to
wireTapMat(akka.stream.Graph<akka.stream.SinkShape<Out>, M2>, akka.japi.function.Function2<Mat, M2, M3>)
but will backpressure instead of dropping elements when the givenSink
is not ready.It is recommended to use the internally optimized
Keep.left
andKeep.right
combiners where appropriate instead of manually writing functions that pass through one of the values.- Parameters:
that
- (undocumented)matF
- (undocumented)- Returns:
- (undocumented)
- See Also:
alsoTo(akka.stream.Graph<akka.stream.SinkShape<Out>, ?>)
-
divertTo
public Flow<In,Out,Mat> divertTo(Graph<SinkShape<Out>,?> that, Predicate<Out> when)
Attaches the givenSink
to thisFlow
, meaning that elements will be sent to theSink
instead of being passed through if the predicatewhen
returnstrue
.'''Emits when''' emits when an element is available from the input and the chosen output has demand
'''Backpressures when''' the currently chosen output back-pressures
'''Completes when''' upstream completes and no output is pending
'''Cancels when''' any of the downstreams cancel
- Parameters:
that
- (undocumented)when
- (undocumented)- Returns:
- (undocumented)
-
divertToMat
public <M2,M3> Flow<In,Out,M3> divertToMat(Graph<SinkShape<Out>,M2> that, Predicate<Out> when, Function2<Mat,M2,M3> matF)
Attaches the givenSink
to thisFlow
, meaning that elements will be sent to theSink
instead of being passed through if the predicatewhen
returnstrue
.- Parameters:
that
- (undocumented)when
- (undocumented)matF
- (undocumented)- Returns:
- (undocumented)
- See Also:
It is recommended to use the internally optimized Keep.left and Keep.right combiners where appropriate instead of manually writing functions that pass through one of the values.
-
wireTap
public Flow<In,Out,Mat> wireTap(Graph<SinkShape<Out>,?> that)
Attaches the givenSink
to thisFlow
as a wire tap, meaning that elements that pass through will also be sent to the wire-tap Sink, without the latter affecting the mainline flow. If the wire-tap Sink backpressures, elements that would've been sent to it will be dropped instead.It is similar to
alsoTo(akka.stream.Graph<akka.stream.SinkShape<Out>, ?>)
which does backpressure instead of dropping elements.'''Emits when''' element is available and demand exists from the downstream; the element will also be sent to the wire-tap Sink if there is demand.
'''Backpressures when''' downstream backpressures
'''Completes when''' upstream completes
'''Cancels when''' downstream cancels
- Parameters:
that
- (undocumented)- Returns:
- (undocumented)
-
wireTapMat
public <M2,M3> Flow<In,Out,M3> wireTapMat(Graph<SinkShape<Out>,M2> that, Function2<Mat,M2,M3> matF)
Attaches the givenSink
to thisFlow
as a wire tap, meaning that elements that pass through will also be sent to the wire-tap Sink, without the latter affecting the mainline flow. If the wire-tap Sink backpressures, elements that would've been sent to it will be dropped instead.It is similar to
alsoToMat(akka.stream.Graph<akka.stream.SinkShape<Out>, M2>, akka.japi.function.Function2<Mat, M2, M3>)
which does backpressure instead of dropping elements.It is recommended to use the internally optimized
Keep.left
andKeep.right
combiners where appropriate instead of manually writing functions that pass through one of the values.- Parameters:
that
- (undocumented)matF
- (undocumented)- Returns:
- (undocumented)
- See Also:
wireTap(akka.japi.function.Procedure<Out>)
-
interleave
public Flow<In,Out,Mat> interleave(Graph<SourceShape<Out>,?> that, int segmentSize)
Interleave is a deterministic merge of the givenSource
with elements of thisFlow
. It first emitssegmentSize
number of elements from this flow to downstream, then - same amount forthat
source, then repeat process.Example:
Source<Integer, ?> src = Source.from(Arrays.asList(1, 2, 3)) Flow<Integer, Integer, ?> flow = flow.interleave(Source.from(Arrays.asList(4, 5, 6, 7)), 2) src.via(flow) // 1, 2, 4, 5, 3, 6, 7
After one of upstreams is complete than all the rest elements will be emitted from the second one
If this
Flow
orSource
gets upstream error - stream completes with failure.'''Emits when''' element is available from the currently consumed upstream
'''Backpressures when''' downstream backpressures. Signal to current upstream, switch to next upstream when received
segmentSize
elements'''Completes when''' the
Flow
and givenSource
completes'''Cancels when''' downstream cancels
- Parameters:
that
- (undocumented)segmentSize
- (undocumented)- Returns:
- (undocumented)
-
interleave
public Flow<In,Out,Mat> interleave(Graph<SourceShape<Out>,?> that, int segmentSize, boolean eagerClose)
Interleave is a deterministic merge of the givenSource
with elements of thisFlow
. It first emitssegmentSize
number of elements from this flow to downstream, then - same amount forthat
source, then repeat process.If eagerClose is false and one of the upstreams complete the elements from the other upstream will continue passing through the interleave operator. If eagerClose is true and one of the upstream complete interleave will cancel the other upstream and complete itself.
If this
Flow
orSource
gets upstream error - stream completes with failure.'''Emits when''' element is available from the currently consumed upstream
'''Backpressures when''' downstream backpressures. Signal to current upstream, switch to next upstream when received
segmentSize
elements'''Completes when''' the
Flow
and givenSource
completes'''Cancels when''' downstream cancels
- Parameters:
that
- (undocumented)segmentSize
- (undocumented)eagerClose
- (undocumented)- Returns:
- (undocumented)
-
interleaveMat
public <M,M2> Flow<In,Out,M2> interleaveMat(Graph<SourceShape<Out>,M> that, int segmentSize, Function2<Mat,M,M2> matF)
Interleave is a deterministic merge of the givenSource
with elements of thisFlow
. It first emitssegmentSize
number of elements from this flow to downstream, then - same amount forthat
source, then repeat process.After one of upstreams is complete than all the rest elements will be emitted from the second one
If this
Flow
orSource
gets upstream error - stream completes with failure.It is recommended to use the internally optimized
Keep.left
andKeep.right
combiners where appropriate instead of manually writing functions that pass through one of the values.- Parameters:
that
- (undocumented)segmentSize
- (undocumented)matF
- (undocumented)- Returns:
- (undocumented)
- See Also:
interleave(akka.stream.Graph<akka.stream.SourceShape<Out>, ?>, int)
-
interleaveMat
public <M,M2> Flow<In,Out,M2> interleaveMat(Graph<SourceShape<Out>,M> that, int segmentSize, boolean eagerClose, Function2<Mat,M,M2> matF)
Interleave is a deterministic merge of the givenSource
with elements of thisFlow
. It first emitssegmentSize
number of elements from this flow to downstream, then - same amount forthat
source, then repeat process.If eagerClose is false and one of the upstreams complete the elements from the other upstream will continue passing through the interleave operator. If eagerClose is true and one of the upstream complete interleave will cancel the other upstream and complete itself.
If this
Flow
orSource
gets upstream error - stream completes with failure.It is recommended to use the internally optimized
Keep.left
andKeep.right
combiners where appropriate instead of manually writing functions that pass through one of the values.- Parameters:
that
- (undocumented)segmentSize
- (undocumented)eagerClose
- (undocumented)matF
- (undocumented)- Returns:
- (undocumented)
- See Also:
interleave(akka.stream.Graph<akka.stream.SourceShape<Out>, ?>, int)
-
merge
public Flow<In,Out,Mat> merge(Graph<SourceShape<Out>,?> that)
Merge the givenSource
to thisFlow
, taking elements as they arrive from input streams, picking randomly when several elements ready.'''Emits when''' one of the inputs has an element available
'''Backpressures when''' downstream backpressures
'''Completes when''' all upstreams complete
'''Cancels when''' downstream cancels
- Parameters:
that
- (undocumented)- Returns:
- (undocumented)
-
merge
public Flow<In,Out,Mat> merge(Graph<SourceShape<Out>,?> that, boolean eagerComplete)
Merge the givenSource
to thisFlow
, taking elements as they arrive from input streams, picking randomly when several elements ready.'''Emits when''' one of the inputs has an element available
'''Backpressures when''' downstream backpressures
'''Completes when''' all upstreams complete (eagerComplete=false) or one upstream completes (eagerComplete=true), default value is
false
'''Cancels when''' downstream cancels
- Parameters:
that
- (undocumented)eagerComplete
- (undocumented)- Returns:
- (undocumented)
-
mergeMat
public <M,M2> Flow<In,Out,M2> mergeMat(Graph<SourceShape<Out>,M> that, Function2<Mat,M,M2> matF)
Merge the givenSource
to thisFlow
, taking elements as they arrive from input streams, picking randomly when several elements ready.It is recommended to use the internally optimized
Keep.left
andKeep.right
combiners where appropriate instead of manually writing functions that pass through one of the values.- Parameters:
that
- (undocumented)matF
- (undocumented)- Returns:
- (undocumented)
- See Also:
merge(akka.stream.Graph<akka.stream.SourceShape<Out>, ?>)
-
mergeMat
public <M,M2> Flow<In,Out,M2> mergeMat(Graph<SourceShape<Out>,M> that, Function2<Mat,M,M2> matF, boolean eagerComplete)
Merge the givenSource
to thisFlow
, taking elements as they arrive from input streams, picking randomly when several elements ready.It is recommended to use the internally optimized
Keep.left
andKeep.right
combiners where appropriate instead of manually writing functions that pass through one of the values.- Parameters:
that
- (undocumented)matF
- (undocumented)eagerComplete
- (undocumented)- Returns:
- (undocumented)
- See Also:
merge(akka.stream.Graph<akka.stream.SourceShape<Out>, ?>)
-
mergeSorted
public <M> Flow<In,Out,Mat> mergeSorted(Graph<SourceShape<Out>,M> that, java.util.Comparator<Out> comp)
Merge the givenSource
to thisFlow
, taking elements as they arrive from input streams, picking always the smallest of the available elements (waiting for one element from each side to be available). This means that possible contiguity of the input streams is not exploited to avoid waiting for elements, this merge will block when one of the inputs does not have more elements (and does not complete).'''Emits when''' all of the inputs have an element available
'''Backpressures when''' downstream backpressures
'''Completes when''' all upstreams complete
'''Cancels when''' downstream cancels
- Parameters:
that
- (undocumented)comp
- (undocumented)- Returns:
- (undocumented)
-
mergeSortedMat
public <Mat2,Mat3> Flow<In,Out,Mat3> mergeSortedMat(Graph<SourceShape<Out>,Mat2> that, java.util.Comparator<Out> comp, Function2<Mat,Mat2,Mat3> matF)
Merge the givenSource
to thisFlow
, taking elements as they arrive from input streams, picking always the smallest of the available elements (waiting for one element from each side to be available). This means that possible contiguity of the input streams is not exploited to avoid waiting for elements, this merge will block when one of the inputs does not have more elements (and does not complete).It is recommended to use the internally optimized
Keep.left
andKeep.right
combiners where appropriate instead of manually writing functions that pass through one of the values.- Parameters:
that
- (undocumented)comp
- (undocumented)matF
- (undocumented)- Returns:
- (undocumented)
-
zip
public <T> Flow<In,Pair<Out,T>,Mat> zip(Graph<SourceShape<T>,?> source)
Combine the elements of currentFlow
and the givenSource
into a stream of tuples.'''Emits when''' all of the inputs have an element available
'''Backpressures when''' downstream backpressures
'''Completes when''' any upstream completes
'''Cancels when''' downstream cancels
- Parameters:
source
- (undocumented)- Returns:
- (undocumented)
-
zipMat
public <T,M,M2> Flow<In,Pair<Out,T>,M2> zipMat(Graph<SourceShape<T>,M> that, Function2<Mat,M,M2> matF)
Combine the elements of currentFlow
and the givenSource
into a stream of tuples.It is recommended to use the internally optimized
Keep.left
andKeep.right
combiners where appropriate instead of manually writing functions that pass through one of the values.- Parameters:
that
- (undocumented)matF
- (undocumented)- Returns:
- (undocumented)
- See Also:
zip(akka.stream.Graph<akka.stream.SourceShape<T>, ?>)
-
zipLatest
public <T> Flow<In,Pair<Out,T>,Mat> zipLatest(Graph<SourceShape<T>,?> source)
Combine the elements of 2 streams into a stream of tuples, picking always the latest element of each.A
ZipLatest
has aleft
and aright
input port and oneout
port.No element is emitted until at least one element from each Source becomes available.
'''Emits when''' all of the inputs have at least an element available, and then each time an element becomes * available on either of the inputs
'''Backpressures when''' downstream backpressures
'''Completes when''' any upstream completes
'''Cancels when''' downstream cancels
- Parameters:
source
- (undocumented)- Returns:
- (undocumented)
-
zipLatestMat
public <T,M,M2> Flow<In,Pair<Out,T>,M2> zipLatestMat(Graph<SourceShape<T>,M> that, Function2<Mat,M,M2> matF)
Combine the elements of currentFlow
and the givenSource
into a stream of tuples, picking always the latest element of each.It is recommended to use the internally optimized
Keep.left
andKeep.right
combiners where appropriate instead of manually writing functions that pass through one of the values.- Parameters:
that
- (undocumented)matF
- (undocumented)- Returns:
- (undocumented)
- See Also:
zipLatest(akka.stream.Graph<akka.stream.SourceShape<T>, ?>)
-
zipWith
public <Out2,Out3> Flow<In,Out3,Mat> zipWith(Graph<SourceShape<Out2>,?> that, Function2<Out,Out2,Out3> combine)
Put together the elements of currentFlow
and the givenSource
into a stream of combined elements using a combiner function.'''Emits when''' all of the inputs have an element available
'''Backpressures when''' downstream backpressures
'''Completes when''' any upstream completes
'''Cancels when''' downstream cancels
- Parameters:
that
- (undocumented)combine
- (undocumented)- Returns:
- (undocumented)
-
zipWithMat
public <Out2,Out3,M,M2> Flow<In,Out3,M2> zipWithMat(Graph<SourceShape<Out2>,M> that, Function2<Out,Out2,Out3> combine, Function2<Mat,M,M2> matF)
Put together the elements of currentFlow
and the givenSource
into a stream of combined elements using a combiner function.It is recommended to use the internally optimized
Keep.left
andKeep.right
combiners where appropriate instead of manually writing functions that pass through one of the values.- Parameters:
that
- (undocumented)combine
- (undocumented)matF
- (undocumented)- Returns:
- (undocumented)
- See Also:
zipWith(akka.stream.Graph<akka.stream.SourceShape<Out2>, ?>, akka.japi.function.Function2<Out, Out2, Out3>)
-
zipLatestWith
public <Out2,Out3> Flow<In,Out3,Mat> zipLatestWith(Graph<SourceShape<Out2>,?> that, Function2<Out,Out2,Out3> combine)
Combine the elements of multiple streams into a stream of combined elements using a combiner function, picking always the latest of the elements of each source.No element is emitted until at least one element from each Source becomes available. Whenever a new element appears, the zipping function is invoked with a tuple containing the new element and the other last seen elements.
'''Emits when''' all of the inputs have at least an element available, and then each time an element becomes available on either of the inputs
'''Backpressures when''' downstream backpressures
'''Completes when''' any of the upstreams completes
'''Cancels when''' downstream cancels
- Parameters:
that
- (undocumented)combine
- (undocumented)- Returns:
- (undocumented)
-
zipLatestWithMat
public <Out2,Out3,M,M2> Flow<In,Out3,M2> zipLatestWithMat(Graph<SourceShape<Out2>,M> that, Function2<Out,Out2,Out3> combine, Function2<Mat,M,M2> matF)
Put together the elements of currentFlow
and the givenSource
into a stream of combined elements using a combiner function, picking always the latest element of each.It is recommended to use the internally optimized
Keep.left
andKeep.right
combiners where appropriate instead of manually writing functions that pass through one of the values.- Parameters:
that
- (undocumented)combine
- (undocumented)matF
- (undocumented)- Returns:
- (undocumented)
- See Also:
zipLatestWith(akka.stream.Graph<akka.stream.SourceShape<Out2>, ?>, akka.japi.function.Function2<Out, Out2, Out3>)
-
zipWithIndex
public Flow<In,Pair<Out,java.lang.Long>,Mat> zipWithIndex()
Combine the elements of current flow into a stream of tuples consisting of all elements paired with their index. Indices start at 0.'''Emits when''' upstream emits an element and is paired with their index
'''Backpressures when''' downstream backpressures
'''Completes when''' upstream completes
'''Cancels when''' downstream cancels
- Returns:
- (undocumented)
-
initialTimeout
public Flow<In,Out,Mat> initialTimeout(scala.concurrent.duration.FiniteDuration timeout)
Deprecated.Use the overloaded one which accepts java.time.Duration instead. Since 2.5.12.If the first element has not passed through this operator before the provided timeout, the stream is failed with aTimeoutException
.'''Emits when''' upstream emits an element
'''Backpressures when''' downstream backpressures
'''Completes when''' upstream completes or fails if timeout elapses before first element arrives
'''Cancels when''' downstream cancels
- Parameters:
timeout
- (undocumented)- Returns:
- (undocumented)
-
initialTimeout
public Flow<In,Out,Mat> initialTimeout(java.time.Duration timeout)
If the first element has not passed through this operator before the provided timeout, the stream is failed with aTimeoutException
.'''Emits when''' upstream emits an element
'''Backpressures when''' downstream backpressures
'''Completes when''' upstream completes or fails if timeout elapses before first element arrives
'''Cancels when''' downstream cancels
- Parameters:
timeout
- (undocumented)- Returns:
- (undocumented)
-
completionTimeout
public Flow<In,Out,Mat> completionTimeout(scala.concurrent.duration.FiniteDuration timeout)
Deprecated.Use the overloaded one which accepts java.time.Duration instead. Since 2.5.12.If the completion of the stream does not happen until the provided timeout, the stream is failed with aTimeoutException
.'''Emits when''' upstream emits an element
'''Backpressures when''' downstream backpressures
'''Completes when''' upstream completes or fails if timeout elapses before upstream completes
'''Cancels when''' downstream cancels
- Parameters:
timeout
- (undocumented)- Returns:
- (undocumented)
-
completionTimeout
public Flow<In,Out,Mat> completionTimeout(java.time.Duration timeout)
If the completion of the stream does not happen until the provided timeout, the stream is failed with aTimeoutException
.'''Emits when''' upstream emits an element
'''Backpressures when''' downstream backpressures
'''Completes when''' upstream completes or fails if timeout elapses before upstream completes
'''Cancels when''' downstream cancels
- Parameters:
timeout
- (undocumented)- Returns:
- (undocumented)
-
idleTimeout
public Flow<In,Out,Mat> idleTimeout(scala.concurrent.duration.FiniteDuration timeout)
Deprecated.Use the overloaded one which accepts java.time.Duration instead. Since 2.5.12.If the time between two processed elements exceeds the provided timeout, the stream is failed with aTimeoutException
. The timeout is checked periodically, so the resolution of the check is one period (equals to timeout value).'''Emits when''' upstream emits an element
'''Backpressures when''' downstream backpressures
'''Completes when''' upstream completes or fails if timeout elapses between two emitted elements
'''Cancels when''' downstream cancels
- Parameters:
timeout
- (undocumented)- Returns:
- (undocumented)
-
idleTimeout
public Flow<In,Out,Mat> idleTimeout(java.time.Duration timeout)
If the time between two processed elements exceeds the provided timeout, the stream is failed with aTimeoutException
. The timeout is checked periodically, so the resolution of the check is one period (equals to timeout value).'''Emits when''' upstream emits an element
'''Backpressures when''' downstream backpressures
'''Completes when''' upstream completes or fails if timeout elapses between two emitted elements
'''Cancels when''' downstream cancels
- Parameters:
timeout
- (undocumented)- Returns:
- (undocumented)
-
backpressureTimeout
public Flow<In,Out,Mat> backpressureTimeout(scala.concurrent.duration.FiniteDuration timeout)
Deprecated.Use the overloaded one which accepts java.time.Duration instead. Since 2.5.12.If the time between the emission of an element and the following downstream demand exceeds the provided timeout, the stream is failed with aTimeoutException
. The timeout is checked periodically, so the resolution of the check is one period (equals to timeout value).'''Emits when''' upstream emits an element
'''Backpressures when''' downstream backpressures
'''Completes when''' upstream completes or fails if timeout elapses between element emission and downstream demand.
'''Cancels when''' downstream cancels
- Parameters:
timeout
- (undocumented)- Returns:
- (undocumented)
-
backpressureTimeout
public Flow<In,Out,Mat> backpressureTimeout(java.time.Duration timeout)
If the time between the emission of an element and the following downstream demand exceeds the provided timeout, the stream is failed with aTimeoutException
. The timeout is checked periodically, so the resolution of the check is one period (equals to timeout value).'''Emits when''' upstream emits an element
'''Backpressures when''' downstream backpressures
'''Completes when''' upstream completes or fails if timeout elapses between element emission and downstream demand.
'''Cancels when''' downstream cancels
- Parameters:
timeout
- (undocumented)- Returns:
- (undocumented)
-
keepAlive
public Flow<In,Out,Mat> keepAlive(scala.concurrent.duration.FiniteDuration maxIdle, Creator<Out> injectedElem)
Deprecated.Use the overloaded one which accepts java.time.Duration instead. Since 2.5.12.Injects additional elements if upstream does not emit for a configured amount of time. In other words, this operator attempts to maintains a base rate of emitted elements towards the downstream.If the downstream backpressures then no element is injected until downstream demand arrives. Injected elements do not accumulate during this period.
Upstream elements are always preferred over injected elements.
'''Emits when''' upstream emits an element or if the upstream was idle for the configured period
'''Backpressures when''' downstream backpressures
'''Completes when''' upstream completes
'''Cancels when''' downstream cancels
- Parameters:
maxIdle
- (undocumented)injectedElem
- (undocumented)- Returns:
- (undocumented)
-
keepAlive
public Flow<In,Out,Mat> keepAlive(java.time.Duration maxIdle, Creator<Out> injectedElem)
Injects additional elements if upstream does not emit for a configured amount of time. In other words, this operator attempts to maintains a base rate of emitted elements towards the downstream.If the downstream backpressures then no element is injected until downstream demand arrives. Injected elements do not accumulate during this period.
Upstream elements are always preferred over injected elements.
'''Emits when''' upstream emits an element or if the upstream was idle for the configured period
'''Backpressures when''' downstream backpressures
'''Completes when''' upstream completes
'''Cancels when''' downstream cancels
- Parameters:
maxIdle
- (undocumented)injectedElem
- (undocumented)- Returns:
- (undocumented)
-
throttle
public Flow<In,Out,Mat> throttle(int elements, java.time.Duration per)
Sends elements downstream with speed limited toelements/per
. In other words, this operator set the maximum rate for emitting messages. This operator works for streams where all elements have the same cost or length.Throttle implements the token bucket model. There is a bucket with a given token capacity (burst size). Tokens drops into the bucket at a given rate and can be
spared
for later use up to bucket capacity to allow some burstiness. Whenever stream wants to send an element, it takes as many tokens from the bucket as element costs. If there isn't any, throttle waits until the bucket accumulates enough tokens. Elements that costs more than the allowed burst will be delayed proportionally to their cost minus available tokens, meeting the target rate. Bucket is full when stream just materialized and started.The burst size is calculated based on the given rate (
cost/per
) as 0.1 * rate, for example: - rate < 20/second => burst size 1 - rate 20/second => burst size 2 - rate 100/second => burst size 10 - rate 200/second => burst size 20The throttle
mode
isakka.stream.ThrottleMode.Shaping
, which makes pauses before emitting messages to meet throttle rate.'''Emits when''' upstream emits an element and configured time per each element elapsed
'''Backpressures when''' downstream backpressures or the incoming rate is higher than the speed limit
'''Completes when''' upstream completes
'''Cancels when''' downstream cancels
- Parameters:
elements
- (undocumented)per
- (undocumented)- Returns:
- (undocumented)
-
throttle
public Flow<In,Out,Mat> throttle(int elements, scala.concurrent.duration.FiniteDuration per, int maximumBurst, ThrottleMode mode)
Deprecated.Use the overloaded one which accepts java.time.Duration instead. Since 2.5.12.Sends elements downstream with speed limited toelements/per
. In other words, this operator set the maximum rate for emitting messages. This operator works for streams where all elements have the same cost or length.Throttle implements the token bucket model. There is a bucket with a given token capacity (burst size or maximumBurst). Tokens drops into the bucket at a given rate and can be
spared
for later use up to bucket capacity to allow some burstiness. Whenever stream wants to send an element, it takes as many tokens from the bucket as element costs. If there isn't any, throttle waits until the bucket accumulates enough tokens. Elements that costs more than the allowed burst will be delayed proportionally to their cost minus available tokens, meeting the target rate. Bucket is full when stream just materialized and started.Parameter
mode
manages behavior when upstream is faster than throttle rate: -akka.stream.ThrottleMode.Shaping
makes pauses before emitting messages to meet throttle rate -akka.stream.ThrottleMode.Enforcing
fails with exception when upstream is faster than throttle rateIt is recommended to use non-zero burst sizes as they improve both performance and throttling precision by allowing the implementation to avoid using the scheduler when input rates fall below the enforced limit and to reduce most of the inaccuracy caused by the scheduler resolution (which is in the range of milliseconds).
WARNING: Be aware that throttle is using scheduler to slow down the stream. This scheduler has minimal time of triggering next push. Consequently it will slow down the stream as it has minimal pause for emitting. This can happen in case burst is 0 and speed is higher than 30 events per second. You need to increase the
maximumBurst
if elements arrive with small interval (30 milliseconds or less). Use the overloadedthrottle
method withoutmaximumBurst
parameter to automatically calculate themaximumBurst
based on the given rate (cost/per
). In other words the throttler always enforces the rate limit whenmaximumBurst
parameter is given, but in certain cases (mostly due to limited scheduler resolution) it enforces a tighter bound than what was prescribed.'''Emits when''' upstream emits an element and configured time per each element elapsed
'''Backpressures when''' downstream backpressures or the incoming rate is higher than the speed limit
'''Completes when''' upstream completes
'''Cancels when''' downstream cancels
- Parameters:
elements
- (undocumented)per
- (undocumented)maximumBurst
- (undocumented)mode
- (undocumented)- Returns:
- (undocumented)
-
throttle
public Flow<In,Out,Mat> throttle(int elements, java.time.Duration per, int maximumBurst, ThrottleMode mode)
Sends elements downstream with speed limited toelements/per
. In other words, this operator set the maximum rate for emitting messages. This operator works for streams where all elements have the same cost or length.Throttle implements the token bucket model. There is a bucket with a given token capacity (burst size or maximumBurst). Tokens drops into the bucket at a given rate and can be
spared
for later use up to bucket capacity to allow some burstiness. Whenever stream wants to send an element, it takes as many tokens from the bucket as element costs. If there isn't any, throttle waits until the bucket accumulates enough tokens. Elements that costs more than the allowed burst will be delayed proportionally to their cost minus available tokens, meeting the target rate. Bucket is full when stream just materialized and started.Parameter
mode
manages behavior when upstream is faster than throttle rate: -akka.stream.ThrottleMode.Shaping
makes pauses before emitting messages to meet throttle rate -akka.stream.ThrottleMode.Enforcing
fails with exception when upstream is faster than throttle rateIt is recommended to use non-zero burst sizes as they improve both performance and throttling precision by allowing the implementation to avoid using the scheduler when input rates fall below the enforced limit and to reduce most of the inaccuracy caused by the scheduler resolution (which is in the range of milliseconds).
WARNING: Be aware that throttle is using scheduler to slow down the stream. This scheduler has minimal time of triggering next push. Consequently it will slow down the stream as it has minimal pause for emitting. This can happen in case burst is 0 and speed is higher than 30 events per second. You need to increase the
maximumBurst
if elements arrive with small interval (30 milliseconds or less). Use the overloadedthrottle
method withoutmaximumBurst
parameter to automatically calculate themaximumBurst
based on the given rate (cost/per
). In other words the throttler always enforces the rate limit whenmaximumBurst
parameter is given, but in certain cases (mostly due to limited scheduler resolution) it enforces a tighter bound than what was prescribed.'''Emits when''' upstream emits an element and configured time per each element elapsed
'''Backpressures when''' downstream backpressures or the incoming rate is higher than the speed limit
'''Completes when''' upstream completes
'''Cancels when''' downstream cancels
- Parameters:
elements
- (undocumented)per
- (undocumented)maximumBurst
- (undocumented)mode
- (undocumented)- Returns:
- (undocumented)
-
throttle
public Flow<In,Out,Mat> throttle(int cost, scala.concurrent.duration.FiniteDuration per, int maximumBurst, Function<Out,java.lang.Integer> costCalculation, ThrottleMode mode)
Deprecated.Use the overloaded one which accepts java.time.Duration instead. Since 2.5.12.Sends elements downstream with speed limited tocost/per
. Cost is calculating for each element individually by callingcalculateCost
function. This operator works for streams when elements have different cost(length). Streams ofByteString
for example.Throttle implements the token bucket model. There is a bucket with a given token capacity (burst size or maximumBurst). Tokens drops into the bucket at a given rate and can be
spared
for later use up to bucket capacity to allow some burstiness. Whenever stream wants to send an element, it takes as many tokens from the bucket as element costs. If there isn't any, throttle waits until the bucket accumulates enough tokens. Elements that costs more than the allowed burst will be delayed proportionally to their cost minus available tokens, meeting the target rate. Bucket is full when stream just materialized and started.Parameter
mode
manages behavior when upstream is faster than throttle rate: -akka.stream.ThrottleMode.Shaping
makes pauses before emitting messages to meet throttle rate -akka.stream.ThrottleMode.Enforcing
fails with exception when upstream is faster than throttle rate. Enforcing cannot emit elements that cost more than the maximumBurstIt is recommended to use non-zero burst sizes as they improve both performance and throttling precision by allowing the implementation to avoid using the scheduler when input rates fall below the enforced limit and to reduce most of the inaccuracy caused by the scheduler resolution (which is in the range of milliseconds).
WARNING: Be aware that throttle is using scheduler to slow down the stream. This scheduler has minimal time of triggering next push. Consequently it will slow down the stream as it has minimal pause for emitting. This can happen in case burst is 0 and speed is higher than 30 events per second. You need to increase the
maximumBurst
if elements arrive with small interval (30 milliseconds or less). Use the overloadedthrottle
method withoutmaximumBurst
parameter to automatically calculate themaximumBurst
based on the given rate (cost/per
). In other words the throttler always enforces the rate limit whenmaximumBurst
parameter is given, but in certain cases (mostly due to limited scheduler resolution) it enforces a tighter bound than what was prescribed.'''Emits when''' upstream emits an element and configured time per each element elapsed
'''Backpressures when''' downstream backpressures or the incoming rate is higher than the speed limit
'''Completes when''' upstream completes
'''Cancels when''' downstream cancels
- Parameters:
cost
- (undocumented)per
- (undocumented)maximumBurst
- (undocumented)costCalculation
- (undocumented)mode
- (undocumented)- Returns:
- (undocumented)
-
throttle
public Flow<In,Out,Mat> throttle(int cost, java.time.Duration per, Function<Out,java.lang.Integer> costCalculation)
Sends elements downstream with speed limited tocost/per
. Cost is calculating for each element individually by callingcalculateCost
function. This operator works for streams when elements have different cost(length). Streams ofByteString
for example.Throttle implements the token bucket model. There is a bucket with a given token capacity (burst size). Tokens drops into the bucket at a given rate and can be
spared
for later use up to bucket capacity to allow some burstiness. Whenever stream wants to send an element, it takes as many tokens from the bucket as element costs. If there isn't any, throttle waits until the bucket accumulates enough tokens. Elements that costs more than the allowed burst will be delayed proportionally to their cost minus available tokens, meeting the target rate. Bucket is full when stream just materialized and started.The burst size is calculated based on the given rate (
cost/per
) as 0.1 * rate, for example: - rate < 20/second => burst size 1 - rate 20/second => burst size 2 - rate 100/second => burst size 10 - rate 200/second => burst size 20The throttle
mode
isakka.stream.ThrottleMode.Shaping
, which makes pauses before emitting messages to meet throttle rate.'''Emits when''' upstream emits an element and configured time per each element elapsed
'''Backpressures when''' downstream backpressures or the incoming rate is higher than the speed limit
'''Completes when''' upstream completes
'''Cancels when''' downstream cancels
- Parameters:
cost
- (undocumented)per
- (undocumented)costCalculation
- (undocumented)- Returns:
- (undocumented)
-
throttle
public Flow<In,Out,Mat> throttle(int cost, java.time.Duration per, int maximumBurst, Function<Out,java.lang.Integer> costCalculation, ThrottleMode mode)
Sends elements downstream with speed limited tocost/per
. Cost is calculating for each element individually by callingcalculateCost
function. This operator works for streams when elements have different cost(length). Streams ofByteString
for example.Throttle implements the token bucket model. There is a bucket with a given token capacity (burst size or maximumBurst). Tokens drops into the bucket at a given rate and can be
spared
for later use up to bucket capacity to allow some burstiness. Whenever stream wants to send an element, it takes as many tokens from the bucket as element costs. If there isn't any, throttle waits until the bucket accumulates enough tokens. Elements that costs more than the allowed burst will be delayed proportionally to their cost minus available tokens, meeting the target rate. Bucket is full when stream just materialized and started.Parameter
mode
manages behavior when upstream is faster than throttle rate: -akka.stream.ThrottleMode.Shaping
makes pauses before emitting messages to meet throttle rate -akka.stream.ThrottleMode.Enforcing
fails with exception when upstream is faster than throttle rate. Enforcing cannot emit elements that cost more than the maximumBurstIt is recommended to use non-zero burst sizes as they improve both performance and throttling precision by allowing the implementation to avoid using the scheduler when input rates fall below the enforced limit and to reduce most of the inaccuracy caused by the scheduler resolution (which is in the range of milliseconds).
WARNING: Be aware that throttle is using scheduler to slow down the stream. This scheduler has minimal time of triggering next push. Consequently it will slow down the stream as it has minimal pause for emitting. This can happen in case burst is 0 and speed is higher than 30 events per second. You need to increase the
maximumBurst
if elements arrive with small interval (30 milliseconds or less). Use the overloadedthrottle
method withoutmaximumBurst
parameter to automatically calculate themaximumBurst
based on the given rate (cost/per
). In other words the throttler always enforces the rate limit whenmaximumBurst
parameter is given, but in certain cases (mostly due to limited scheduler resolution) it enforces a tighter bound than what was prescribed.'''Emits when''' upstream emits an element and configured time per each element elapsed
'''Backpressures when''' downstream backpressures or the incoming rate is higher than the speed limit
'''Completes when''' upstream completes
'''Cancels when''' downstream cancels
- Parameters:
cost
- (undocumented)per
- (undocumented)maximumBurst
- (undocumented)costCalculation
- (undocumented)mode
- (undocumented)- Returns:
- (undocumented)
-
throttleEven
public Flow<In,Out,Mat> throttleEven(int elements, scala.concurrent.duration.FiniteDuration per, ThrottleMode mode)
Deprecated.Use the overloaded one which accepts java.time.Duration instead. Since 2.5.12.This is a simplified version of throttle that spreads events evenly across the given time interval.Use this operator when you need just slow down a stream without worrying about exact amount of time between events.
If you want to be sure that no time interval has no more than specified number of events you need to use
throttle()
with maximumBurst attribute.- Parameters:
elements
- (undocumented)per
- (undocumented)mode
- (undocumented)- Returns:
- (undocumented)
- See Also:
throttle(int, java.time.Duration)
-
throttleEven
public Flow<In,Out,Mat> throttleEven(int elements, java.time.Duration per, ThrottleMode mode)
Deprecated.Use throttle without `maximumBurst` parameter instead. Since 2.5.12.This is a simplified version of throttle that spreads events evenly across the given time interval.Use this operator when you need just slow down a stream without worrying about exact amount of time between events.
If you want to be sure that no time interval has no more than specified number of events you need to use
throttle()
with maximumBurst attribute.- Parameters:
elements
- (undocumented)per
- (undocumented)mode
- (undocumented)- Returns:
- (undocumented)
- See Also:
throttle(int, java.time.Duration)
-
throttleEven
public Flow<In,Out,Mat> throttleEven(int cost, scala.concurrent.duration.FiniteDuration per, Function<Out,java.lang.Integer> costCalculation, ThrottleMode mode)
Deprecated.Use throttle without `maximumBurst` parameter instead. Since 2.5.12.This is a simplified version of throttle that spreads events evenly across the given time interval.Use this operator when you need just slow down a stream without worrying about exact amount of time between events.
If you want to be sure that no time interval has no more than specified number of events you need to use
throttle()
with maximumBurst attribute.- Parameters:
cost
- (undocumented)per
- (undocumented)costCalculation
- (undocumented)mode
- (undocumented)- Returns:
- (undocumented)
- See Also:
throttle(int, java.time.Duration)
-
throttleEven
public Flow<In,Out,Mat> throttleEven(int cost, java.time.Duration per, Function<Out,java.lang.Integer> costCalculation, ThrottleMode mode)
Deprecated.Use throttle without `maximumBurst` parameter instead. Since 2.5.12.This is a simplified version of throttle that spreads events evenly across the given time interval.Use this operator when you need just slow down a stream without worrying about exact amount of time between events.
If you want to be sure that no time interval has no more than specified number of events you need to use
throttle()
with maximumBurst attribute.- Parameters:
cost
- (undocumented)per
- (undocumented)costCalculation
- (undocumented)mode
- (undocumented)- Returns:
- (undocumented)
- See Also:
throttle(int, java.time.Duration)
-
detach
public Flow<In,Out,Mat> detach()
Detaches upstream demand from downstream demand without detaching the stream rates; in other words acts like a buffer of size 1.'''Emits when''' upstream emits an element
'''Backpressures when''' downstream backpressures
'''Completes when''' upstream completes
'''Cancels when''' downstream cancels
- Returns:
- (undocumented)
-
watchTermination
public <M> Flow<In,Out,M> watchTermination(Function2<Mat,java.util.concurrent.CompletionStage<Done>,M> matF)
Materializes toCompletionStage
that completes on getting termination message. The future completes with success when received complete message from upstream or cancel from downstream. It fails with the same error when received error message from downstream.- Parameters:
matF
- (undocumented)- Returns:
- (undocumented)
-
monitor
public <M> Flow<In,Out,M> monitor(Function2<Mat,FlowMonitor<Out>,M> combine)
Deprecated.Use monitor() or monitorMat(combine) instead. Since 2.5.17.Materializes toFlowMonitor[Out]
that allows monitoring of the current flow. All events are propagated by the monitor unchanged. Note that the monitor inserts a memory barrier every time it processes an event, and may therefor affect performance.The
combine
function is used to combine theFlowMonitor
with this flow's materialized value.- Parameters:
combine
- (undocumented)- Returns:
- (undocumented)
-
monitorMat
public <M> Flow<In,Out,M> monitorMat(Function2<Mat,FlowMonitor<Out>,M> combine)
Materializes toFlowMonitor[Out]
that allows monitoring of the current flow. All events are propagated by the monitor unchanged. Note that the monitor inserts a memory barrier every time it processes an event, and may therefor affect performance.The
combine
function is used to combine theFlowMonitor
with this flow's materialized value.- Parameters:
combine
- (undocumented)- Returns:
- (undocumented)
-
monitor
public Flow<In,Out,Pair<Mat,FlowMonitor<Out>>> monitor()
Materializes toPair
, which is unlike most other operators (!), in which usually the default materialized value keeping semantics is to keep the left value (by passing> Keep.left()
to a*Mat
version of a method). This operator is an exception from that rule and keeps both values since dropping its sole purpose is to introduce that materialized value.The
FlowMonitor[Out]
allows monitoring of the current flow. All events are propagated by the monitor unchanged. Note that the monitor inserts a memory barrier every time it processes an event, and may therefor affect performance.- Returns:
- (undocumented)
-
initialDelay
public Flow<In,Out,Mat> initialDelay(scala.concurrent.duration.FiniteDuration delay)
Deprecated.Use the overloaded one which accepts java.time.Duration instead. Since 2.5.12.Delays the initial element by the specified duration.'''Emits when''' upstream emits an element if the initial delay is already elapsed
'''Backpressures when''' downstream backpressures or initial delay is not yet elapsed
'''Completes when''' upstream completes
'''Cancels when''' downstream cancels
- Parameters:
delay
- (undocumented)- Returns:
- (undocumented)
-
initialDelay
public Flow<In,Out,Mat> initialDelay(java.time.Duration delay)
Delays the initial element by the specified duration.'''Emits when''' upstream emits an element if the initial delay is already elapsed
'''Backpressures when''' downstream backpressures or initial delay is not yet elapsed
'''Completes when''' upstream completes
'''Cancels when''' downstream cancels
- Parameters:
delay
- (undocumented)- Returns:
- (undocumented)
-
withAttributes
public Flow<In,Out,Mat> withAttributes(Attributes attr)
Replace the attributes of thisFlow
with the given ones. If this Flow is a composite of multiple graphs, new attributes on the composite will be less specific than attributes set directly on the individual graphs of the composite.Note that this operation has no effect on an empty Flow (because the attributes apply only to the contained processing operators).
- Specified by:
withAttributes
in interfaceGraph<In,Out>
- Parameters:
attr
- (undocumented)- Returns:
- (undocumented)
-
addAttributes
public Flow<In,Out,Mat> addAttributes(Attributes attr)
Add the given attributes to thisFlow
. If the specific attribute was already present on this graph this means the added attribute will be more specific than the existing one. If this Flow is a composite of multiple graphs, new attributes on the composite will be less specific than attributes set directly on the individual graphs of the composite.- Specified by:
addAttributes
in interfaceGraph<In,Out>
- Parameters:
attr
- (undocumented)- Returns:
- (undocumented)
-
async
public Flow<In,Out,Mat> async(java.lang.String dispatcher)
Put an asynchronous boundary around thisFlow
-
async
public Flow<In,Out,Mat> async(java.lang.String dispatcher, int inputBufferSize)
Put an asynchronous boundary around thisFlow
-
log
public Flow<In,Out,Mat> log(java.lang.String name, Function<Out,java.lang.Object> extract, LoggingAdapter log)
Logs elements flowing through the stream as well as completion and erroring.By default element and completion signals are logged on debug level, and errors are logged on Error level. This can be adjusted according to your needs by providing a custom
Attributes.LogLevels
attribute on the given Flow:The
extract
function will be applied to each element before logging, so it is possible to log only those fields of a complex object flowing through this element.Uses the given
LoggingAdapter
for logging.Adheres to the
ActorAttributes.SupervisionStrategy
attribute.'''Emits when''' the mapping function returns an element
'''Backpressures when''' downstream backpressures
'''Completes when''' upstream completes
'''Cancels when''' downstream cancels
- Parameters:
name
- (undocumented)extract
- (undocumented)log
- (undocumented)- Returns:
- (undocumented)
-
log
public Flow<In,Out,Mat> log(java.lang.String name, Function<Out,java.lang.Object> extract)
Logs elements flowing through the stream as well as completion and erroring.By default element and completion signals are logged on debug level, and errors are logged on Error level. This can be adjusted according to your needs by providing a custom
Attributes.LogLevels
attribute on the given Flow:The
extract
function will be applied to each element before logging, so it is possible to log only those fields of a complex object flowing through this element.Uses an internally created
LoggingAdapter
which usesakka.stream.Log
as it's source (use this class to configure slf4j loggers).'''Emits when''' the mapping function returns an element
'''Backpressures when''' downstream backpressures
'''Completes when''' upstream completes
'''Cancels when''' downstream cancels
- Parameters:
name
- (undocumented)extract
- (undocumented)- Returns:
- (undocumented)
-
log
public Flow<In,Out,Mat> log(java.lang.String name, LoggingAdapter log)
Logs elements flowing through the stream as well as completion and erroring.By default element and completion signals are logged on debug level, and errors are logged on Error level. This can be adjusted according to your needs by providing a custom
Attributes.LogLevels
attribute on the given Flow:Uses the given
LoggingAdapter
for logging.'''Emits when''' the mapping function returns an element
'''Backpressures when''' downstream backpressures
'''Completes when''' upstream completes
'''Cancels when''' downstream cancels
- Parameters:
name
- (undocumented)log
- (undocumented)- Returns:
- (undocumented)
-
log
public Flow<In,Out,Mat> log(java.lang.String name)
Logs elements flowing through the stream as well as completion and erroring.By default element and completion signals are logged on debug level, and errors are logged on Error level. This can be adjusted according to your needs by providing a custom
Attributes.LogLevels
attribute on the given Flow.Uses an internally created
LoggingAdapter
which usesakka.stream.Log
as it's source (use this class to configure slf4j loggers).'''Emits when''' the mapping function returns an element
'''Backpressures when''' downstream backpressures
'''Completes when''' upstream completes
'''Cancels when''' downstream cancels
- Parameters:
name
- (undocumented)- Returns:
- (undocumented)
-
toProcessor
public RunnableGraph<org.reactivestreams.Processor<In,Out>> toProcessor()
Converts this Flow to aRunnableGraph
that materializes to a Reactive StreamsProcessor
which implements the operations encapsulated by this Flow. Every materialization results in a new Processor instance, i.e. the returnedRunnableGraph
is reusable.- Returns:
- A
RunnableGraph
that materializes to a Processor when run() is called on it.
-
asFlowWithContext
public <U,CtxU,CtxOut> FlowWithContext<U,CtxU,Out,CtxOut,Mat> asFlowWithContext(Function2<U,CtxU,In> collapseContext, Function<Out,CtxOut> extractContext)
Turns a Flow into a FlowWithContext which manages a context per element along a stream.- Parameters:
collapseContext
- turn each incoming pair of element and context value into an element of this FlowextractContext
- turn each outgoing element of this Flow into an outgoing context valueAPI MAY CHANGE
- Returns:
- (undocumented)
-
-