Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Introduction to Reactive Programming with Reactor 3.1

Introduction to Reactive Programming with Reactor 3.1

Martin Hristov

April 19, 2018
Tweet

More Decks by Martin Hristov

Other Decks in Programming

Transcript

  1. public interface PriceFeed { void addPriceListener(PriceListener listener); } public interface

    PriceListener { void onPriceTick(PriceTick priceTick); void onError(Throwable error); void onComplete(); } public interface PriceTick { String getSymbol(); BigDecimal getPrice(); }
  2. Flux.<PriceTick>create(emitter -> priceFeed.addPriceListener( new PriceListener() { @Override public void onPriceTick(PriceTick

    priceTick) { emitter.next(priceTick); } @Override public void onError(Throwable err) { emitter.error(err); } @Override public void onComplete() { emitter.complete(); } }), FluxSink.OverflowStrategy.LATEST );
  3. @Test public void testFooBar() { Flux<String> source = Flux.just("foo", "bar");

    StepVerifier.create(source) .expectNext("foo") .expectNext("bar") .expectComplete() .verify(); }
  4. java.lang.IndexOutOfBoundsException: Source emitted more than one item at MonoSingle$SingleSubscriber.onNext(MonoSingle.java:120) at

    reactor.core.publisher.FluxFlatMap$FlatMapMain.emitScalar(FluxFlatMap.java:380) at reactor.core.publisher.FluxFlatMap$FlatMapMain.onNext(FluxFlatMap.java:349) at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable. java:119) at reactor.core.publisher.FluxRange$RangeSubscription.slowPath(FluxRange.java:144) at reactor.core.publisher.FluxRange$RangeSubscription.request(FluxRange.java:99) at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.request(FluxMapFuseable .java:172) at reactor.core.publisher.FluxFlatMap$FlatMapMain.onSubscribe(FluxFlatMap.java:316) at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onSubscribe(FluxMapFuse able.java:94) at reactor.core.publisher.FluxRange.subscribe(FluxRange.java:68) at reactor.core.publisher.FluxMapFuseable.subscribe(FluxMapFuseable.java:67) at reactor.core.publisher.FluxFlatMap.subscribe(FluxFlatMap.java:98) at reactor.core.publisher.MonoSingle.subscribe(MonoSingle.java:58) at reactor.core.publisher.Mono.subscribeWith(Mono.java:2668) at reactor.core.publisher.Mono.subscribe(Mono.java:2629) at reactor.core.publisher.Mono.subscribe(Mono.java:2604) at reactor.core.publisher.Mono.subscribe(Mono.java:2582) at reactor.guide.GuideTests.debuggingCommonStacktrace(GuideTests.java:722)
  5. java.lang.IndexOutOfBoundsException: Source emitted more than one item at MonoSingle$SingleSubscriber.onNext(MonoSingle.java:120) at

    reactor.core.publisher.FluxFlatMap$FlatMapMain.emitScalar(FluxFlatMap.java:380) at reactor.core.publisher.FluxFlatMap$FlatMapMain.onNext(FluxFlatMap.java:349) at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable. java:119) at reactor.core.publisher.FluxRange$RangeSubscription.slowPath(FluxRange.java:144) at reactor.core.publisher.FluxRange$RangeSubscription.request(FluxRange.java:99) at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.request(FluxMapFuseable .java:172) at reactor.core.publisher.FluxFlatMap$FlatMapMain.onSubscribe(FluxFlatMap.java:316) at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onSubscribe(FluxMapFuse able.java:94) at reactor.core.publisher.FluxRange.subscribe(FluxRange.java:68) at reactor.core.publisher.FluxMapFuseable.subscribe(FluxMapFuseable.java:67) at reactor.core.publisher.FluxFlatMap.subscribe(FluxFlatMap.java:98) at reactor.core.publisher.MonoSingle.subscribe(MonoSingle.java:58) at reactor.core.publisher.Mono.subscribeWith(Mono.java:2668) at reactor.core.publisher.Mono.subscribe(Mono.java:2629) at reactor.core.publisher.Mono.subscribe(Mono.java:2604) at reactor.core.publisher.Mono.subscribe(Mono.java:2582) at reactor.guide.GuideTests.debuggingCommonStacktrace(GuideTests.java:722)
  6. ... at reactor.core.publisher.Mono.subscribeWith(Mono.java:2668) at reactor.core.publisher.Mono.subscribe(Mono.java:2629) at reactor.core.publisher.Mono.subscribe(Mono.java:2604) at reactor.core.publisher.Mono.subscribe(Mono.java:2582) at

    reactor.guide.GuideTests.debuggingActivated(GuideTests.java:727) Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException: Assembly trace from producer [reactor.core.publisher.MonoSingle] : reactor.core.publisher.Flux.single(Flux.java:5335) reactor.guide.GuideTests.scatterAndGather(GuideTests.java:689) reactor.guide.GuideTests.populateDebug(GuideTests.java:702) org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:55) org.junit.rules.RunRules.evaluate(RunRules.java:20) Error has been observed by the following operator(s): |_ Flux.single(TestWatcher.java:55)