Add docs and examples for RS fromPublisher #25468
This commit is contained in:
parent
45636e5af4
commit
dba69dba1d
8 changed files with 155 additions and 31 deletions
|
|
@ -1,22 +1,16 @@
|
|||
# asSubscriber
|
||||
|
||||
Integration with Reactive Streams, materializes into a `org.reactivestreams.Subscriber`.
|
||||
Integration with Reactive Streams, materializes into a @javadoc[Subscriber](java.util.concurrent.Flow.Subscriber).
|
||||
|
||||
@ref[Source operators](../index.md#source-operators)
|
||||
|
||||
## Signature
|
||||
|
||||
@@@ div { .group-scala }
|
||||
Scala
|
||||
: @@snip[JavaFlowSupport.scala](/akka-stream/src/main/scala-jdk-9/akka/stream/scaladsl/JavaFlowSupport.scala) { #asSubscriber }
|
||||
|
||||
@@snip[JavaFlowSupport.scala](/akka-stream/src/main/scala-jdk-9/akka/stream/scaladsl/JavaFlowSupport.scala) { #asSubscriber }
|
||||
|
||||
@@@
|
||||
|
||||
@@@ div { .group-java }
|
||||
|
||||
@@snip[JavaFlowSupport.java](/akka-stream/src/main/java-jdk-9/akka/stream/javadsl/JavaFlowSupport.java) { #asSubscriber }
|
||||
|
||||
@@@
|
||||
Java
|
||||
: @@snip[JavaFlowSupport.java](/akka-docs/src/test/java-jdk9-only/jdocs/stream/operators/source/AsSubscriber.java) { #api }
|
||||
|
||||
## Description
|
||||
|
||||
|
|
@ -28,10 +22,12 @@ This @javadoc[Subscriber](java.util.concurrent.Flow.Subscriber) can be attached
|
|||
[Reactive Streams](https://www.reactive-streams.org/) @javadoc[Publisher](java.util.concurrent.Flow.Publisher)
|
||||
to populate it.
|
||||
|
||||
If the API you want to consume elements from provides a @javadoc[Publisher](java.util.concurrent.Flow.Publisher) instead of accepting a @javadoc[Subscriber](java.util.concurrent.Flow.Subscriber), see @ref[fromPublisher](fromPublisher.md).
|
||||
|
||||
@@@ note
|
||||
|
||||
For JDK 8 users: since @javadoc[java.util.concurrent.Flow](java.util.concurrent.Flow) was introduced in JDK version 9,
|
||||
if you are still on version 8 you may use the [org.reactivestreams](https://github.com/reactive-streams/reactive-streams-jvm#reactive-streams) library with `Source.asSubscriber` and `Flow.asSubscriber`.
|
||||
if you are still on version 8 you may use the [org.reactivestreams](https://github.com/reactive-streams/reactive-streams-jvm#reactive-streams) library with @apidoc[Source.asSubscriber](Source$) { scala="#asSubscriber[T]:akka.stream.scaladsl.Source[T,org.reactivestreams.Subscriber[T]]" java="#asSubscriber()" }.
|
||||
|
||||
@@@
|
||||
|
||||
|
|
|
|||
|
|
@ -1,17 +1,47 @@
|
|||
# fromPublisher
|
||||
|
||||
Integration with Reactive Streams, subscribes to a `org.reactivestreams.Publisher`.
|
||||
Integration with Reactive Streams, subscribes to a @javadoc[Publisher](java.util.concurrent.Flow.Publisher).
|
||||
|
||||
@ref[Source operators](../index.md#source-operators)
|
||||
|
||||
@@@div { .group-scala }
|
||||
|
||||
## Signature
|
||||
|
||||
@@signature [Source.scala](/akka-stream/src/main/scala/akka/stream/scaladsl/Source.scala) { #fromPublisher }
|
||||
Scala
|
||||
: @@snip[JavaFlowSupport.scala](/akka-stream/src/main/scala-jdk-9/akka/stream/scaladsl/JavaFlowSupport.scala) { #fromPublisher }
|
||||
|
||||
Java
|
||||
: @@snip[JavaFlowSupport.java](/akka-docs/src/test/java-jdk9-only/jdocs/stream/operators/source/FromPublisher.java) { #api }
|
||||
|
||||
@@@
|
||||
|
||||
## Description
|
||||
|
||||
TODO: We would welcome help on contributing descriptions and examples, see: https://github.com/akka/akka/issues/25646
|
||||
If you want to create a @apidoc[Source] that gets its elements from another library that supports
|
||||
[Reactive Streams](https://www.reactive-streams.org/), you can use `JavaFlowSupport.Source.fromPublisher`.
|
||||
This source will produce the elements from the @javadoc[Publisher](java.util.concurrent.Flow.Publisher),
|
||||
and coordinate backpressure as needed.
|
||||
|
||||
If the API you want to consume elements from accepts a @javadoc[Subscriber](java.util.concurrent.Flow.Subscriber) instead of providing a @javadoc[Publisher](java.util.concurrent.Flow.Publisher), see @ref[asSubscriber](asSubscriber.md).
|
||||
|
||||
@@@ note
|
||||
|
||||
For JDK 8 users: since @javadoc[java.util.concurrent.Flow](java.util.concurrent.Flow) was introduced in JDK version 9,
|
||||
if you are still on version 8 you may use the [org.reactivestreams](https://github.com/reactive-streams/reactive-streams-jvm#reactive-streams) library with @apidoc[Source.fromPublisher](Source$) { scala="#fromPublisher[T](publisher:org.reactivestreams.Publisher[T]):akka.stream.scaladsl.Source[T,akka.NotUsed]" java="#fromPublisher(org.reactivestreams.Publisher)" }.
|
||||
|
||||
@@@
|
||||
|
||||
## Example
|
||||
|
||||
Suppose we use a database client that supports [Reactive Streams](https://www.reactive-streams.org/),
|
||||
we could create a @apidoc[Source] that queries the database for its rows. That @apidoc[Source] can then
|
||||
be used for further processing, for example creating a @apidoc[Source] that contains the names of the
|
||||
rows.
|
||||
|
||||
Because both the database driver and Akka Streams support [Reactive Streams](https://www.reactive-streams.org/),
|
||||
backpressure is applied throughout the stream, preventing us from running out of memory when the database
|
||||
rows are consumed slower than they are produced by the database.
|
||||
|
||||
Scala
|
||||
: @@snip [FromPublisher.scala](/akka-docs/src/test/scala-jdk9-only/docs/stream/operators/source/FromPublisher.scala) { #imports #example }
|
||||
|
||||
Java
|
||||
: @@snip [FromPublisher.java](/akka-docs/src/test/java-jdk9-only/jdocs/stream/operators/source/FromPublisher.java) { #imports #example }
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue