Submit Search
Upload
What's new in Reactor Californium
•
1 like
•
413 views
Stéphane Maldini
Follow
What's new in Reactor Californium, the 3rd release train (3.2.x) of Project Reactor.
Read less
Read more
Technology
Report
Share
Report
Share
1 of 75
Download now
Download to read offline
Recommended
Automation and Culture Changes for 40M Subscriber Platform Operation
Automation and Culture Changes for 40M Subscriber Platform Operation
VMware Tanzu
Heavyweights: Tipping the Scales with Very Large Foundations
Heavyweights: Tipping the Scales with Very Large Foundations
VMware Tanzu
Marcin Grzejszczak - Contract Tests in the Enterprise
Marcin Grzejszczak - Contract Tests in the Enterprise
SegFaultConf
RDBMS and Apache Geode Data Movement: Low Latency ETL Pipeline By Using Cloud...
RDBMS and Apache Geode Data Movement: Low Latency ETL Pipeline By Using Cloud...
VMware Tanzu
PCF 2.3: A First Look
PCF 2.3: A First Look
VMware Tanzu
P to V to C: The Value of Bringing “Everything” to Containers
P to V to C: The Value of Bringing “Everything” to Containers
VMware Tanzu
IPT angular2 typescript SPA 2016
IPT angular2 typescript SPA 2016
Trayan Iliev
React HOCs, Context and Observables
React HOCs, Context and Observables
Trayan Iliev
Recommended
Automation and Culture Changes for 40M Subscriber Platform Operation
Automation and Culture Changes for 40M Subscriber Platform Operation
VMware Tanzu
Heavyweights: Tipping the Scales with Very Large Foundations
Heavyweights: Tipping the Scales with Very Large Foundations
VMware Tanzu
Marcin Grzejszczak - Contract Tests in the Enterprise
Marcin Grzejszczak - Contract Tests in the Enterprise
SegFaultConf
RDBMS and Apache Geode Data Movement: Low Latency ETL Pipeline By Using Cloud...
RDBMS and Apache Geode Data Movement: Low Latency ETL Pipeline By Using Cloud...
VMware Tanzu
PCF 2.3: A First Look
PCF 2.3: A First Look
VMware Tanzu
P to V to C: The Value of Bringing “Everything” to Containers
P to V to C: The Value of Bringing “Everything” to Containers
VMware Tanzu
IPT angular2 typescript SPA 2016
IPT angular2 typescript SPA 2016
Trayan Iliev
React HOCs, Context and Observables
React HOCs, Context and Observables
Trayan Iliev
Spring Cloud Gateway - Stéphane Maldini
Spring Cloud Gateway - Stéphane Maldini
VMware Tanzu
Spring Cloud Gateway
Spring Cloud Gateway
Stéphane Maldini
Containers Were Never Your End State
Containers Were Never Your End State
VMware Tanzu
Spring Cloud Gateway - Ryan Baxter
Spring Cloud Gateway - Ryan Baxter
VMware Tanzu
Spring Cloud Gateway - Ryan Baxter
Spring Cloud Gateway - Ryan Baxter
VMware Tanzu
riffing on Knative - Scott Andrews
riffing on Knative - Scott Andrews
VMware Tanzu
Living on the Edge With Spring Cloud Gateway - Cora Iberkleid
Living on the Edge With Spring Cloud Gateway - Cora Iberkleid
VMware Tanzu
Living on the Edge With Spring Cloud Gateway - Cora Iberkleid
Living on the Edge With Spring Cloud Gateway - Cora Iberkleid
VMware Tanzu
From Zero to Cloud using Spring with Cloud-Native Data Technologies - John Blum
From Zero to Cloud using Spring with Cloud-Native Data Technologies - John Blum
VMware Tanzu
Automating Brownfield Application Modernization on Pivotal Cloud Foundry
Automating Brownfield Application Modernization on Pivotal Cloud Foundry
VMware Tanzu
Spring Cloud Kubernetes - Ryan Baxter
Spring Cloud Kubernetes - Ryan Baxter
VMware Tanzu
Spring Cloud Kubernetes - Ryan Baxter
Spring Cloud Kubernetes - Ryan Baxter
VMware Tanzu
Spring Cloud Kubernetes - Spencer Gibb
Spring Cloud Kubernetes - Spencer Gibb
VMware Tanzu
Architectures That Bend but Don't Break
Architectures That Bend but Don't Break
Matt Stine
Cloud-Native Streaming Platform: Running Apache Kafka on PKS (Pivotal Contain...
Cloud-Native Streaming Platform: Running Apache Kafka on PKS (Pivotal Contain...
VMware Tanzu
How to Manage Microservices and APIs with Apigee and Istio
How to Manage Microservices and APIs with Apigee and Istio
VMware Tanzu
Reactive frontends with RxJS and Angular
Reactive frontends with RxJS and Angular
VMware Tanzu
Cloud Native Java with Spring Cloud Services
Cloud Native Java with Spring Cloud Services
VMware Tanzu
Innovating Faster with Continuous Application Security
Innovating Faster with Continuous Application Security
Jeff Williams
Accelerating the Consumption of APIs Built on Cloud Foundry
Accelerating the Consumption of APIs Built on Cloud Foundry
VMware Tanzu
The value of reactive
The value of reactive
Stéphane Maldini
Multi-service reactive streams using Spring, Reactor, RSocket
Multi-service reactive streams using Spring, Reactor, RSocket
Stéphane Maldini
More Related Content
Similar to What's new in Reactor Californium
Spring Cloud Gateway - Stéphane Maldini
Spring Cloud Gateway - Stéphane Maldini
VMware Tanzu
Spring Cloud Gateway
Spring Cloud Gateway
Stéphane Maldini
Containers Were Never Your End State
Containers Were Never Your End State
VMware Tanzu
Spring Cloud Gateway - Ryan Baxter
Spring Cloud Gateway - Ryan Baxter
VMware Tanzu
Spring Cloud Gateway - Ryan Baxter
Spring Cloud Gateway - Ryan Baxter
VMware Tanzu
riffing on Knative - Scott Andrews
riffing on Knative - Scott Andrews
VMware Tanzu
Living on the Edge With Spring Cloud Gateway - Cora Iberkleid
Living on the Edge With Spring Cloud Gateway - Cora Iberkleid
VMware Tanzu
Living on the Edge With Spring Cloud Gateway - Cora Iberkleid
Living on the Edge With Spring Cloud Gateway - Cora Iberkleid
VMware Tanzu
From Zero to Cloud using Spring with Cloud-Native Data Technologies - John Blum
From Zero to Cloud using Spring with Cloud-Native Data Technologies - John Blum
VMware Tanzu
Automating Brownfield Application Modernization on Pivotal Cloud Foundry
Automating Brownfield Application Modernization on Pivotal Cloud Foundry
VMware Tanzu
Spring Cloud Kubernetes - Ryan Baxter
Spring Cloud Kubernetes - Ryan Baxter
VMware Tanzu
Spring Cloud Kubernetes - Ryan Baxter
Spring Cloud Kubernetes - Ryan Baxter
VMware Tanzu
Spring Cloud Kubernetes - Spencer Gibb
Spring Cloud Kubernetes - Spencer Gibb
VMware Tanzu
Architectures That Bend but Don't Break
Architectures That Bend but Don't Break
Matt Stine
Cloud-Native Streaming Platform: Running Apache Kafka on PKS (Pivotal Contain...
Cloud-Native Streaming Platform: Running Apache Kafka on PKS (Pivotal Contain...
VMware Tanzu
How to Manage Microservices and APIs with Apigee and Istio
How to Manage Microservices and APIs with Apigee and Istio
VMware Tanzu
Reactive frontends with RxJS and Angular
Reactive frontends with RxJS and Angular
VMware Tanzu
Cloud Native Java with Spring Cloud Services
Cloud Native Java with Spring Cloud Services
VMware Tanzu
Innovating Faster with Continuous Application Security
Innovating Faster with Continuous Application Security
Jeff Williams
Accelerating the Consumption of APIs Built on Cloud Foundry
Accelerating the Consumption of APIs Built on Cloud Foundry
VMware Tanzu
Similar to What's new in Reactor Californium
(20)
Spring Cloud Gateway - Stéphane Maldini
Spring Cloud Gateway - Stéphane Maldini
Spring Cloud Gateway
Spring Cloud Gateway
Containers Were Never Your End State
Containers Were Never Your End State
Spring Cloud Gateway - Ryan Baxter
Spring Cloud Gateway - Ryan Baxter
Spring Cloud Gateway - Ryan Baxter
Spring Cloud Gateway - Ryan Baxter
riffing on Knative - Scott Andrews
riffing on Knative - Scott Andrews
Living on the Edge With Spring Cloud Gateway - Cora Iberkleid
Living on the Edge With Spring Cloud Gateway - Cora Iberkleid
Living on the Edge With Spring Cloud Gateway - Cora Iberkleid
Living on the Edge With Spring Cloud Gateway - Cora Iberkleid
From Zero to Cloud using Spring with Cloud-Native Data Technologies - John Blum
From Zero to Cloud using Spring with Cloud-Native Data Technologies - John Blum
Automating Brownfield Application Modernization on Pivotal Cloud Foundry
Automating Brownfield Application Modernization on Pivotal Cloud Foundry
Spring Cloud Kubernetes - Ryan Baxter
Spring Cloud Kubernetes - Ryan Baxter
Spring Cloud Kubernetes - Ryan Baxter
Spring Cloud Kubernetes - Ryan Baxter
Spring Cloud Kubernetes - Spencer Gibb
Spring Cloud Kubernetes - Spencer Gibb
Architectures That Bend but Don't Break
Architectures That Bend but Don't Break
Cloud-Native Streaming Platform: Running Apache Kafka on PKS (Pivotal Contain...
Cloud-Native Streaming Platform: Running Apache Kafka on PKS (Pivotal Contain...
How to Manage Microservices and APIs with Apigee and Istio
How to Manage Microservices and APIs with Apigee and Istio
Reactive frontends with RxJS and Angular
Reactive frontends with RxJS and Angular
Cloud Native Java with Spring Cloud Services
Cloud Native Java with Spring Cloud Services
Innovating Faster with Continuous Application Security
Innovating Faster with Continuous Application Security
Accelerating the Consumption of APIs Built on Cloud Foundry
Accelerating the Consumption of APIs Built on Cloud Foundry
More from Stéphane Maldini
The value of reactive
The value of reactive
Stéphane Maldini
Multi-service reactive streams using Spring, Reactor, RSocket
Multi-service reactive streams using Spring, Reactor, RSocket
Stéphane Maldini
The Future of Reactive Architectures
The Future of Reactive Architectures
Stéphane Maldini
Spring boot 2.0 reactive bits (June 2018)
Spring boot 2.0 reactive bits (June 2018)
Stéphane Maldini
Reactor 3.0, a reactive foundation for java 8 and Spring
Reactor 3.0, a reactive foundation for java 8 and Spring
Stéphane Maldini
Introduction to Reactive Streams and Reactor 2.5
Introduction to Reactive Streams and Reactor 2.5
Stéphane Maldini
Intro to Reactive Programming
Intro to Reactive Programming
Stéphane Maldini
Designing for Distributed Systems with Reactor and Reactive Streams
Designing for Distributed Systems with Reactor and Reactive Streams
Stéphane Maldini
Reactor, Reactive streams and MicroServices
Reactor, Reactive streams and MicroServices
Stéphane Maldini
Springone2gx 2014 Reactive Streams and Reactor
Springone2gx 2014 Reactive Streams and Reactor
Stéphane Maldini
Reactor grails realtime web devoxx 2013
Reactor grails realtime web devoxx 2013
Stéphane Maldini
Groovy reactor grails realtime web devoxx 2013
Groovy reactor grails realtime web devoxx 2013
Stéphane Maldini
Ss2gx
Ss2gx
Stéphane Maldini
Reactor spring one2gx_2013_0902-final
Reactor spring one2gx_2013_0902-final
Stéphane Maldini
Eventsggx
Eventsggx
Stéphane Maldini
More from Stéphane Maldini
(15)
The value of reactive
The value of reactive
Multi-service reactive streams using Spring, Reactor, RSocket
Multi-service reactive streams using Spring, Reactor, RSocket
The Future of Reactive Architectures
The Future of Reactive Architectures
Spring boot 2.0 reactive bits (June 2018)
Spring boot 2.0 reactive bits (June 2018)
Reactor 3.0, a reactive foundation for java 8 and Spring
Reactor 3.0, a reactive foundation for java 8 and Spring
Introduction to Reactive Streams and Reactor 2.5
Introduction to Reactive Streams and Reactor 2.5
Intro to Reactive Programming
Intro to Reactive Programming
Designing for Distributed Systems with Reactor and Reactive Streams
Designing for Distributed Systems with Reactor and Reactive Streams
Reactor, Reactive streams and MicroServices
Reactor, Reactive streams and MicroServices
Springone2gx 2014 Reactive Streams and Reactor
Springone2gx 2014 Reactive Streams and Reactor
Reactor grails realtime web devoxx 2013
Reactor grails realtime web devoxx 2013
Groovy reactor grails realtime web devoxx 2013
Groovy reactor grails realtime web devoxx 2013
Ss2gx
Ss2gx
Reactor spring one2gx_2013_0902-final
Reactor spring one2gx_2013_0902-final
Eventsggx
Eventsggx
Recently uploaded
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
Delhi Call girls
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
ThousandEyes
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
null - The Open Security Community
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
Ridwan Fadjar
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
Allon Mureinik
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other Frameworks
Softradix Technologies
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
soniya singh
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Safe Software
Snow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter Roads
Hyundai Motor Group
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
Scott Keck-Warren
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
Pixlogix Infotech
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
Scott Keck-Warren
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
Delhi Call girls
How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?
XfilesPro
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
Pooja Nehwal
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
Padma Pradeep
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
naman860154
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
Enterprise Knowledge
Recently uploaded
(20)
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other Frameworks
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Snow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter Roads
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping Elbows
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
What's new in Reactor Californium
1.
Reactor Californium Stephane Maldini
- @smaldini
2.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
3.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 3 But Really ? Californium ?
4.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 4
5.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Just Released 5
6.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Reactor Core 3.2 Reactor Addons 3.2 Reactor Netty 0.8 6
7.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 7 Used by Spring Framework 5.1
8.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Used by Spring Framework 5.1 8 (And Soon® Spring Boot 2.1)
9.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Reactor Core 3.2
10.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Initial Micrometer Support 10 Monitor Flux and Mono
11.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Initial Micrometer Support 11 New metric() operator with auto detection for name() and tag()
12.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Initial Micrometer Support 12 Noop if Micrometer not on class path
13.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Initial Micrometer Support 13 Flux.range(1, 1000) .delayUntil(i -> Mono.delay(Duration.ofMillis(100*(i % 10)))) .name("test-flow") .log() .metrics() .limitRate(10) .repeat() .blockLast();
14.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Initial Micrometer Support 14 Flux.range(1, 1000) .delayUntil(i -> Mono.delay(Duration.ofMillis(100*(i % 10)))) .name("test-flow") .log() .metrics() .limitRate(10) .repeat() .blockLast(); Identify the flux for meaningful metrics
15.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Initial Micrometer Support : Good to know 15 Time delays between start and data signals… …Then between each data signals Time full flow duration if finite Tag by signal type Detect Malformed Reactive Signals
16.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Initial Micrometer Support w/ Spring Boot 16 compile "io.projectreactor:reactor-core:3.2.0.RELEASE" compile "org.springframework.boot:spring-boot-starter-webflux" compile "org.springframework.boot:spring-boot-starter-actuator" compile "io.micrometer:micrometer-registry-prometheus"
17.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Initial Micrometer Support w/ Spring Boot 17 compile "io.projectreactor:reactor-core:3.2.0.RELEASE" compile "org.springframework.boot:spring-boot-starter-webflux" compile "org.springframework.boot:spring-boot-starter-actuator" compile "io.micrometer:micrometer-registry-prometheus"
18.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 18
19.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ reactor.util.context.Context: reactive flow attributes 19 Reward end-to-end users with unique features in 3.2
20.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ reactor.util.context.Context: reactive flow attributes 20 Immutable container using optimized copy-on-write
21.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ reactor.util.context.Context: reactive flow attributes 21 Propagate at subscribe time from the subscribing side to the producing side.
22.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ reactor.util.context.Context: reactive flow attributes 22 StepVerifier.create( Mono.subscriberContext() .subscriberContext(Context.of("initial", "value")) ) .expectNextMatches(c -> c.hasKey("initial")) .verifyComplete();
23.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ reactor.util.context.Context: reactive flow attributes 23 StepVerifier.create( Mono.subscriberContext() .subscriberContext(Context.of("initial", "value")) ) .expectNextMatches(c -> c.hasKey("initial")) .verifyComplete(); Read from the current subscription Write during current subscription
24.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ reactor.util.context.Context: reactive flow attributes 24 StepVerifier.create( Flux.just("foo") .flatMap(v -> Mono.subscriberContext()) .subscriberContext(Context.of("initial", "value")) ) .expectNextMatches(c -> c.hasKey("initial")) .verifyComplete();
25.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ reactor.util.context.Context: reactive flow attributes 25 StepVerifier.create( Flux.just("foo") .flatMap(v -> Mono.subscriberContext()) .subscriberContext(Context.of("initial", "value")) ) .expectNextMatches(c -> c.hasKey("initial")) .verifyComplete(); Works inside nested flows
26.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Context: an alternative to Thread-Local 26 Spring Security Spring Cloud Sleuth doOnDiscard onErrorContinue Spring Data …
27.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ DoOnDiscard 27 Reroute upstream operators discarded items
28.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ DoOnDiscard 28 Useful to build strongly consistent reactive flows Even more useful to release resources such as pooled buffers (hello netty!)
29.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ DoOnDiscard : react to filtered items 29 AtomicInteger discardNumberCount = new AtomicInteger(); Flux.range(1, 12) .filter(i -> i % 2 == 0) .doOnDiscard(Number.class, i -> discardNumberCount.incrementAndGet()) .subscribe(); Assertions.assertThat(discardNumberCount).hasValue(6);
30.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ DoOnDiscard : react to partial collections 30 DirectProcessor<String> p = DirectProcessor.create(); Disposable d = p.collectList() .doOnDiscard(String.class, System.out::println) .subscribe(); p.onNext("a"); p.onNext("b"); p.onNext("c"); d.dispose();
31.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ DoOnDiscard : react to cancelled items 31 DirectProcessor<String> p = DirectProcessor.create(); Disposable d = p.collectList() .doOnDiscard(String.class, System.out::println) .subscribe(); p.onNext("a"); p.onNext("b"); p.onNext("c"); d.dispose(); a b c Console Output
32.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ DoOnDiscard : testable behavior 32 StepVerifier.create(Flux.range(1, 12) .filter(i -> i % 2 == 0) ) .expectNext(2, 4, 6, 8, 10, 12) .expectComplete() .verifyThenAssertThat() .hasDiscarded(1, 3, 5, 7, 9, 11);
33.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ DoOnDiscard : scope of work 33 Limited number of supported operators Planning to add more during 3.2.x
34.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ DoOnDiscard : scope of work 34 Limited number of supported operators Planning to add more during 3.2.x Look for this in JavaDoc
35.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ DoOnDiscard : scope of work 35 Does not guarantee exactly-once callback invocation combineLatest overlapping buffers overlapping windows
36.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ DoOnDiscard : scope of work 36 Use your own de-duplication if you need exactly-once semantics
37.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ onErrorContinue 37 Reroute upstream operators selected errors
38.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ onErrorContinue 38 Useful to build more resilient reactive flows Even more useful to messaging use cases such as data processing pipelines
39.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ onErrorContinue : keep things running 39 Flux.just(0, 1) .map(i -> 1 / i) .onErrorContinue((e, data) -> System.out.println(e.getMessage() + " - " + data)) .log() .subscribe();
40.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ onErrorContinue : keep things running 40 Flux.just(0, 1) .map(i -> 1 / i) .onErrorContinue((e, data) -> System.out.println(e.getMessage() + " - " + data)) .log() .subscribe(); A Door left open for errors
41.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ onErrorContinue : keep things running 41 Flux.just(0, 1) .map(i -> 1 / i) .onErrorContinue((e, data) -> System.out.println(e.getMessage() + " - " + data)) .log() .subscribe(); Console Output [main] INFO reactor.Flux.ContextStart.1 - | onSubscribe([Fuseable] FluxContextStart.ContextStartSubscriber) [main] INFO reactor.Flux.ContextStart.1 - | request(unbounded) / by zero - 0 [main] INFO reactor.Flux.ContextStart.1 - | onNext(1) [main] INFO reactor.Flux.ContextStart.1 - | onComplete()
42.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ onErrorContinue : keep things running 42 Flux.just(0, 1) .map(i -> 1 / i) .onErrorContinue((e, data) -> System.out.println(e.getMessage() + " - " + data)) .log() .subscribe(); Console Output [main] INFO reactor.Flux.ContextStart.1 - | onSubscribe([Fuseable] FluxContextStart.ContextStartSubscriber) [main] INFO reactor.Flux.ContextStart.1 - | request(unbounded) / by zero - 0 [main] INFO reactor.Flux.ContextStart.1 - | onNext(1) [main] INFO reactor.Flux.ContextStart.1 - | onComplete() / by zero - 0
43.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ onErrorContinue : keep things running 43 Flux.just(0, 1) .map(i -> 1 / i) .onErrorContinue((e, data) -> System.out.println(e.getMessage() + " - " + data)) .log() .subscribe(); Console Output [main] INFO reactor.Flux.ContextStart.1 - | onSubscribe([Fuseable] FluxContextStart.ContextStartSubscriber) [main] INFO reactor.Flux.ContextStart.1 - | request(unbounded) / by zero - 0 [main] INFO reactor.Flux.ContextStart.1 - | onNext(1) [main] INFO reactor.Flux.ContextStart.1 - | onComplete() onNext(1)
44.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ onErrorContinue : keep things running 44 Flux.just(0, 1) .flatMap(f -> Mono.just(f).map(i -> 1/i)) .onErrorContinue((e, data) -> System.out.println(e.getMessage() + " - " + data)) .log() .subscribe();
45.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ onErrorContinue : keep things running 45 Flux.just(0, 1) .flatMap(f -> Mono.just(f).map(i -> 1/i)) .onErrorContinue((e, data) -> System.out.println(e.getMessage() + " - " + data)) .log() .subscribe(); Nested Flows support - Thanks Context !
46.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ onErrorContinue : scope of work 46 Limited number of supported operators Planning to add more during 3.2.x
47.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ onErrorContinue : scope of work 47 Limited number of supported operators Planning to add more during 3.2.x
48.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ onErrorContinue : scope of work 48 Error must not be related to the start or the end of sequence
49.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ onErrorContinue : scope of work 49 Impact the way the flow is working As the operator usually needs to request an extra item
50.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ onErrorContinue : scope of work 50 Impact the way the flow is working As the operator usually needs to request an extra item No use-case for Mono#onErrorContinue
51.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ retryBackoff : pragmatic retry 51 The new retry operator you will want to use all the time
52.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ retryBackoff : pragmatic retry 52 The new retry operator you will want to use all the time With randomized exponential timeouts
53.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ retryBackoff : pragmatic retry 53 The new retry operator you will want to use all the time With randomized exponential timeouts Promoted operator from Reactor Addons 👍
54.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ retryBackoff : pragmatic retry 54 StepVerifier.withVirtualTime(() -> Mono.error(new IOException("boom retry")) .doOnError(e -> elapsedList.add(Schedulers.parallel().now(TimeUnit.MILLISECONDS))) .retryBackoff(4, Duration.ofMillis(100), Duration.ofMillis(2000)) ) .thenAwait(Duration.ofMinutes(1)) .expectErrorSatisfies(e -> assertThat(e).hasMessage("Retries exhausted: 4/4")) .verify(); System.out.println(elapsedList);
55.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ retryBackoff : pragmatic retry 55 StepVerifier.withVirtualTime(() -> Mono.error(new IOException("boom retry")) .doOnError(e -> elapsedList.add(Schedulers.parallel().now(TimeUnit.MILLISECONDS))) .retryBackoff(4, Duration.ofMillis(100), Duration.ofMillis(2000)) ) .thenAwait(Duration.ofMinutes(1)) .expectErrorSatisfies(e -> assertThat(e).hasMessage("Retries exhausted: 4/4")) .verify(); System.out.println(elapsedList); pro-tip: use virtual time to instant-test time driven sequences
56.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ retryBackoff : pragmatic retry 56 StepVerifier.withVirtualTime(() -> Mono.error(new IOException("boom retry")) .doOnError(e -> elapsedList.add(Schedulers.parallel().now(TimeUnit.MILLISECONDS))) .retryBackoff(4, Duration.ofMillis(100), Duration.ofMillis(2000)) ) .thenAwait(Duration.ofMinutes(1)) .expectErrorSatisfies(e -> assertThat(e).hasMessage("Retries exhausted: 4/4")) .verify(); System.out.println(elapsedList); Console Output [0, 129, 386, 749, 1463]
57.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ usingWhen : Arbitrary resource lifecycle binding 57 Flux<String> flux = Flux.usingWhen(Mono.fromCallable(TestResource::new), d -> Flux.just("Transaction started", "work in transaction", "more work in transaction"), TestResource::commit, TestResource::rollback); StepVerifier.create(flux) .expectNext("Transaction started") .expectNext("work in transaction") .expectNext("more work in transaction") .verifyComplete();
58.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ usingWhen : Arbitrary resource lifecycle binding 58 Flux<String> flux = Flux.usingWhen(Mono.fromCallable(TestResource::new), d -> Flux.just("Transaction started", "work in transaction", "more work in transaction"), TestResource::commit, TestResource::rollback); StepVerifier.create(flux) .expectNext("Transaction started") .expectNext("work in transaction") .expectNext("more work in transaction") .verifyComplete(); Commit method will be used
59.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ usingWhen : Arbitrary resource lifecycle binding 59 Flux<String> flux = Flux.usingWhen(Mono.fromCallable(TestResource::new), d -> Flux.just("Transaction started").concatWith(Mono.error(new Exception("fail"))), TestResource::commit, TestResource::rollback); StepVerifier.create(flux) .expectNext("Transaction started") .verifyErrorMessage(“fail"); Rollback method will be used
60.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ usingWhen : Arbitrary resource lifecycle binding 60 Flux<String> flux = Flux.usingWhen(Mono.fromCallable(TestResource::new), d -> Flux.just("Transaction started").concatWith(Mono.error(new Exception("fail"))), TestResource::commit, TestResource::rollback, TestResource::rollback); StepVerifier.create(flux) .expectNext("Transaction started”) .thenCancel() .verify(); Rollback method will be used on cancel too
61.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Learn about all improvements 61 https://github.com/reactor/reactor-core/releases/tag/v3.2.0.RELEASE
62.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Things that are still in the oven 62 Full Processor API refactoring
63.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Things that are still in the oven 63 Full Processor API refactoring Too impacting for now
64.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Things that are still in the oven 64 Converting Marble Diagrams to SVG Shout Out to @thekalinga Metrics for Schedulers new FluxSink#tryNext Website improvements
65.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 65 Learn more from Simon Baslé 3:20 Flight of the Flux: A Look at Reactor Execution Model
66.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Reactor Netty 0.8
67.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ The API refining continues 67 Aligned HttpClient APIs with WebClient Merged Options and Stateless builders into XxxClient/XxxServer
68.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ The API refining continues 68 HttpClient.create() .wiretap() .followRedirect(true) .get() .uri("https://projectreactor.io") .responseContent() .asString() .limitRate(1) .reduce(String::concat) .block(Duration.ofSeconds(30));
69.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ The API refining continues 69 HttpClient.create() .wiretap() .followRedirect(true) .get() .uri("https://projectreactor.io") .responseContent() .asString() .limitRate(1) .reduce(String::concat) .block(Duration.ofSeconds(30)); Single level of nesting
70.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ The API refining continues 70 HttpClient.create() .wiretap() .followRedirect(true) .get() .uri("https://projectreactor.io") .responseContent() .asString() .limitRate(1) .reduce(String::concat) .block(Duration.ofSeconds(30)); Specify client options in the builder
71.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ The API refining continues 71 HttpClient.create() .wiretap() .followRedirect(true) .get() .uri("https://projectreactor.io") .responseContent() .asString() .limitRate(1) .reduce(String::concat) .block(Duration.ofSeconds(30)); Basic decoding OoB
72.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 72 Learn more from Violeta Georgieva 11:30 Reactor Netty, the Default Spring Boot 2.0 Runtime
73.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Next ?
74.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ What’s next ? 74 dysprosium [Dy] ? Dubnium [Db] ? Darmstadtium [Ds] ?
75.
Unless otherwise indicated,
these slides are © 2013-2018 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Thanks
Download now