Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Reactor 3.0, a JVM Foundation for Java 8 and Reactive Streams

2,525 views

Published on

SpringOne Platform 2016
Speaker: Stéphane Maldini; Project Reactor Lead, Pivotal.

The apparent simplicity of the publisher/subscriber model as exposed in Reactive-Streams can be deceiving. The relatively fast release cycle for libraries in that space is not a myth, concurrency is hard. To keep out undesired side-effects, most Reactive projects have adopted a vertical approach potentially excluding developers from decision-making around execution model or sometimes language.

What if we were able to leave the developer in control, positioning as a robust foundation and making the most of the now industrial standard Java 8 ?

What if we hardened this foundation through open-source and research collaboration, with a direct feedback loop from Pivotal engineering ?

In essence, that's what we aim to achieve with Reactor 2.5. This session is an invitation to explore how the new Reactor design, structure and features can progressively help you go Reactive and show how it plays out in your applications today and tomorrow.

Published in: Technology
  • Be the first to comment

Reactor 3.0, a JVM Foundation for Java 8 and Reactive Streams

  1. 1. Unless otherwise indicated, these slides are © 2013-2016 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Reactor 3. 
 Reactive Foundation for Java 8 and Spring Stephane Maldini @smaldini
  2. 2. Unless otherwise indicated, these slides are © 2013-2016 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Reactor Core provides for a minimalist set of Reactive Streams ready 
 generators and transformers 2 WHY ?
  3. 3. Unless otherwise indicated, these slides are © 2013-2016 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 3 DIY Reactive Streams Publisher<User> rickSanchez = userRepository.findUser(“rick”); Might produce 0, 1 or N Users ! Produce User when ready Callback for start, result, error or complete rickSanchez.subscribe(new Subscriber<User>(){ … });
  4. 4. Unless otherwise indicated, these slides are © 2013-2016 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ DIY Reactive Streams 4 Can I have an API ?
  5. 5. Unless otherwise indicated, these slides are © 2013-2016 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 5
  6. 6. Unless otherwise indicated, these slides are © 2013-2016 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 3 years to mature 6 R e a c t i v e S t r e a m s C o m m o n s I P C A D D O N S S p r i n g R x C O R E Existential questions 2013: 1.x 2014: 2.x 2016: 3.0 Microservices become the norm Rocky style revival
  7. 7. Unless otherwise indicated, these slides are © 2013-2016 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 3x Influences and Collaborations 7 R e a c t i v e S t r e a m s C o m m o n s I P C A D D O N S S p r i n g R x C O R E
  8. 8. Unless otherwise indicated, these slides are © 2013-2016 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 
 Flux.just("red", "white", "blue")
 .flatMap(value -> Mono.fromCallable(blockingStuff(value))
 .subscribeOn(Schedulers.elastic()))
 .collect(Result::new, Result::add)
 .doOnNext(Result::stop)
 .subscribe(doWithResult); A smarter Publisher ? Flux ! 8
  9. 9. Unless otherwise indicated, these slides are © 2013-2016 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Mono, push/pull CompletionStage 9 Mono.delayMillis(3000)
 .map(d -> "Spring 4")
 .or(Mono.delayMillis(2000).map(d -> "Spring 5"))
 .then(t -> Mono.just(t+ " world"))
 .elapsed()
 .block(); Non!
  10. 10. Unless otherwise indicated, these slides are © 2013-2016 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Mono, push/pull CompletionStage 10 Mono.delayMillis(3000)
 .map(d -> "Spring 4")
 .or(Mono.delayMillis(2000).map(d -> "Spring 5"))
 .then(t -> Mono.just(t+ " world"))
 .elapsed()
 .subscribe(); Oui!
  11. 11. Unless otherwise indicated, these slides are © 2013-2016 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ ONE JAR
 reactor-core.jar 11 3x Simpler API Where Flux and Mono live Make task execution great again and FIFO
  12. 12. Unless otherwise indicated, these slides are © 2013-2016 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Execution Model Freedom 12 Synchronous Asynchronous Scheduler / Scheduler.Worker
  13. 13. Unless otherwise indicated, these slides are © 2013-2016 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 3x more focus on Javadoc 13 http://projectreactor.io/core/docs/api
  14. 14. Unless otherwise indicated, these slides are © 2013-2016 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Learning to Flux & Mono 14 https://spring.io/blog/2016/06/07/notes-on- reactive-programming-part-i-the-reactive- landscape https://spring.io/blog/2016/06/13/notes-on- reactive-programming-part-ii-writing-some-code https://spring.io/blog/2016/07/20/notes-on- reactive-programming-part-iii-a-simple-http-server- application Just browse spring.io/blog already
  15. 15. Unless otherwise indicated, these slides are © 2013-2016 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Bridge Existing Asynchronous Code Mono<String> response = Mono.create(emitter -> {
 HttpListener listener = event -> {
 if (event.getResponseCode() >= 400) {
 emitter.error(new RuntimeExeption("Failed"));
 } else {
 String body = event.getBody();
 if (body.isEmpty()) {
 emitter.complete();
 } else {
 emitter.complete(body.toLowerCase());
 }
 }
 };
 
 client.addListener(listener);
 
 emitter.setCancellation(() -> client.removeListener(listener));
 }); • 15 Also exists for Flux of N items
  16. 16. Unless otherwise indicated, these slides are © 2013-2016 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Operation Fusion • Reactor has a mission to limit the overhead in stack and message passing • 2 key categories : • “Macro Fusion” : merge operators in one (assembly time) • “Micro Fusion” : avoid queue creation and short circuit where possible request lifecycle. 16
  17. 17. Unless otherwise indicated, these slides are © 2013-2016 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Starve CPU’s with ParallelFlux… 17 Flux.range(1, 100000)
 .parallel(3)
 .runOn(Schedulers.parallel())
 .collect(ArrayList::new, ArrayList::add)
 .sequential()
 .reduce(0, (a, b) -> a + b.size())
 .subscribeWith(TestSubscriber.create())
 .await(Duration.ofSeconds(5))
 .assertValues(100_000)
 .assertNoError()
 .assertComplete(); • x3
  18. 18. Unless otherwise indicated, these slides are © 2013-2016 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Efficient and micro bench ready 18 https://github.com/akarnokd/akarnokd-misc/tree/master/src/jmh/java/hu/akarnokd/comparison
  19. 19. Unless otherwise indicated, these slides are © 2013-2016 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Bridge Fabulous RxJava 1 19 RxJava1Adapter
  20. 20. Unless otherwise indicated, these slides are © 2013-2016 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Bridge Java 9 Reactive Streams 20 JdkFlowAdapter
  21. 21. Unless otherwise indicated, these slides are © 2013-2016 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Play with Reactor Core .NET 21 https://www.nuget.org/packages/Reactor.Core/
  22. 22. Unless otherwise indicated, these slides are © 2013-2016 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Backpressure for JS: Reactor Core TypeScript 22 https://www.npmjs.com/package/reactor-core-js
  23. 23. Unless otherwise indicated, these slides are © 2013-2016 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ BREXIT ? 23
  24. 24. Unless otherwise indicated, these slides are © 2013-2016 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ DONALD TRUMP ? 24
  25. 25. Unless otherwise indicated, these slides are © 2013-2016 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ EVERYTHING REACTIVE ? 25
  26. 26. Unless otherwise indicated, these slides are © 2013-2016 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Learn More. Stay Connected. @ProjectReactor @smaldini http://github.com/reactor @springcentral spring.io/blog @pivotal pivotal.io/blog @pivotalcf http://engineering.pivotal.io

×