...
Before using DCAE SDK, please take a moment and read Project Reactor documentation. You should also skim through methods available in Flux and Mono. It can save you many wasted minutes/hours of thinking how to implement the functionality by your own instead of using already implemented method.
However if you are not concerned about performance you can always take a blue pill and go back to blocking world by means of block*
methods.
Rx short intro
For general introduction please read 3rd section of Reactor Documentation.
Some general notes:
- In project reactor you have 2 reactive streams' types at your disposal: Mono which may emit at most 1 element and Flux which may emit 0, finite or infinite number of elements.
- Both of them may end with error - in such situation the stream ends immediately. After stream is terminated (normally or because of error) it won't emit any new elements. You may use retry operators to resubscribe to events in case of error. In cloud environment retryWhen is especially usable: you may use it together with reactor-extra retry functionality in order to support more advanced reaction to unreachable peer microservice.
- Do not block in any of handlers which are passed to operators defined by Reactor. The library uses a set of Schedulers (think thread-pools) which are suitable for different jobs. More details can be found in the documentation. If possible try to use non-blocking APIs.
- Most of operators support back-pressure. That means that a demand for new messages will be signalized from downstream subscribers. For instance if you have a
flux.flatMap(this::doThis).map(this::doThat).subscribe()
then ifdoThis
is very slow it will not request many items from sourceflux
and it will emit items at it's own pace fordoThat
to process. So usually there will be no buffering nor blocking needed betweenflux
anddoThis
. - (Almost) nothing will happen without subscribing to the Flux/Mono. These reactive streams are lazy, so the demand will be signaled only when subscription is being made ie. by means of
subscribe
orblock*
methods. - If you are going to go fully-reactive then you should probably not call subscribe/block anywhere in your code. For instance, when using Reactor Netty or Spring Web Flux you should return Mono/Flux from your core methods and it will be subscribed somewhere by the library you are using.
...
- .
Artifacts
Current version
Code Block | ||
---|---|---|
| ||
<properties> <sdk.version>1.1.2-SNAPSHOT</sdk.version> </properties> |
...