Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming...
Transcript of Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming...
![Page 1: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/1.jpg)
Spring MVC 4.xSpring 5 Web Reactive
Rossen Stoyanchev@rstoya05
Part 1
![Page 2: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/2.jpg)
Spring MVC 4.3
Reactive programming for Java devs
Spring 5 Web Reactive
![Page 3: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/3.jpg)
Shortcut Annotations
@RequestMapping
![Page 4: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/4.jpg)
@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
![Page 5: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/5.jpg)
![Page 6: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/6.jpg)
![Page 7: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/7.jpg)
![Page 8: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/8.jpg)
@RequestScope
@SessionScope
@ApplicationScope
![Page 9: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/9.jpg)
![Page 10: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/10.jpg)
![Page 11: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/11.jpg)
@RequestAttribute
@SessionAttribute
![Page 12: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/12.jpg)
![Page 13: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/13.jpg)
![Page 14: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/14.jpg)
Not to be confused with:
@SessionAttributes
![Page 15: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/15.jpg)
![Page 16: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/16.jpg)
@RestControllerAdvice
![Page 17: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/17.jpg)
@ModelAttribute(binding=false)
![Page 18: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/18.jpg)
Pre-load Foo in the model
Foo object without binding
Form object with binding
![Page 19: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/19.jpg)
HTTP OPTIONS, HEAD
automated handling
![Page 20: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/20.jpg)
curl -v -X OPTIONS http://localhost:8080/foos/123
< HTTP/1.1 200 OK< Server: Apache-Coyote/1.1< Allow: GET,HEAD< Content-Length: 0
![Page 21: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/21.jpg)
curl --head http://localhost:8080/foos/123
HTTP/1.1 200 OKServer: Apache-Coyote/1.1Content-Type: application/json;charset=UTF-8Content-Length: 155
![Page 22: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/22.jpg)
ForwardedHeaderFilter
![Page 23: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/23.jpg)
Complements existing support
for “X-Forwarded-*” in
[ Mvc | Servlet ] UriComponentsBuilder
![Page 24: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/24.jpg)
RestTemplate
default URI variable values
![Page 25: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/25.jpg)
![Page 26: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/26.jpg)
Client Mock REST Tests
expected count + order of requests
![Page 27: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/27.jpg)
![Page 28: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/28.jpg)
Spring MVC 4.3
Reactive programming for Java devs
Spring 5 Web Reactive
![Page 29: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/29.jpg)
Long RunningShift ToConcurrency
29
![Page 30: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/30.jpg)
Self-sufficient apps
App server
Keep it simple, don’t distribute
30
Independent services
Cloud environment
Distributed apps10 years ago
Today
![Page 31: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/31.jpg)
Impact on Programming Model
Imperative logic is not a simple path any more
Forced to deal with asynchronicity
Limits of scale
31
![Page 32: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/32.jpg)
Fundamentally Asynchronous
Async and non-blocking by design
Small number of threads
Efficient scale
32
![Page 33: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/33.jpg)
Design async API with Java Futures
33
![Page 34: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/34.jpg)
Return a Value
34
...
...
![Page 35: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/35.jpg)
Usage
35
![Page 36: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/36.jpg)
Return Value with Future
36
...
May be thrown indifferent thread
![Page 37: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/37.jpg)
Usage
37
Ugh
![Page 38: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/38.jpg)
Return Value with CompletableFuture
38
...
...
![Page 39: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/39.jpg)
Usage
39
Async callback
![Page 40: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/40.jpg)
Return Collection
40
...
...
![Page 41: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/41.jpg)
Return Void
41
...
...
![Page 42: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/42.jpg)
Return Void
42
...
...
Success or Failurecallback
![Page 43: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/43.jpg)
CompletableFuture
43
Fundamentally the right idea for use in async APIs
Allows declarative composition of async logic
Lambdas keep it readable
![Page 44: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/44.jpg)
CompletableFuture
Not ideal for Collection return values
Nor for latency sensitive data sets
Nor large or infinite data sets
44
![Page 45: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/45.jpg)
Async return valuesas a “stream” ?
![Page 46: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/46.jpg)
46
onNext onNext onNext
onError oronComplete
![Page 47: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/47.jpg)
Return type Use case Notificationsvoid Success onComplete()
void Failure onError(Throwable)
User Match onNext(User), onComplete()
User No match onComplete()
User Failure onError(Throwable)
List<User> Two matches onNext(User), onNext(User), onComplete()
List<User> No match onComplete()
List<User> Failure onError(Throwable)
![Page 48: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/48.jpg)
Java 8 Stream
48
Great example of the kind of API we’d like
Declarative composition of async logic per item
Lambdas keep it readable
![Page 49: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/49.jpg)
Java 8 Stream
49
Built for collections
Not for active or “hot” source of data
Latency-sensitive data sequences
![Page 50: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/50.jpg)
50
Doug LeaReactive Streams & Java 9 initial announcement
No single best fluent async API [...]
Until now one missing category was "push" style operations on items as they become available from an active source.
![Page 51: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/51.jpg)
Reactive Streams
51
Small API, spec rules, and TCK
Publish-subscribe with back pressure
Interoperability across async components and libraries
![Page 52: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/52.jpg)
52
Project Reactor
Reactive Streams library for the JVM
Declarative operations on items similar to Java 8 Stream
Flux and Mono reactive composable API types
![Page 53: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/53.jpg)
Reactive Repository
![Page 54: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/54.jpg)
Reactive Repository In Use
![Page 55: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/55.jpg)
onSubscribe
request(unbounded)
onNext(User: Jason)
onNext(User: Jay)
...
onComplete()
By default consume without back-pressure
Example output
![Page 56: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/56.jpg)
Spring MVC 4.xSpring 5 Web Reactive
Rossen Stoyanchev@rstoya05
Part 2
![Page 57: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/57.jpg)
Spring MVC 4.3
Reactive programming for Java devs
Spring 5 Web Reactive
![Page 58: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/58.jpg)
Reactive Programming
A style of micro-architecture
Declarative, functional-style, composition of logic
The opposite of imperative
58
![Page 59: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/59.jpg)
Imperative / Blocking
![Page 60: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/60.jpg)
Functional /Neutral to Asynchronicity
![Page 61: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/61.jpg)
Thread Pool StyleProcessing
61
![Page 62: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/62.jpg)
Server Threads
Application Processing
150 ms 150 ms15 ms 15 ms
20 ms
250 ms
50 ms
150 ms
125 ms
75 ms
200 ms
Thread PoolThread Pool
Network Latency
Network Latency
![Page 63: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/63.jpg)
Server Threads
Application Handling
Load Balancer
Requests Requests
Server Threads
Application Handling
![Page 64: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/64.jpg)
Event Loop StyleProcessing
64
![Page 65: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/65.jpg)
Application Processing
IOselector
worker worker worker
125 ms
75 ms
200 ms
20 ms
50 ms
150 ms
250 ms
![Page 66: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/66.jpg)
pan.addWater(() -> range.lowerHeat(() -> pan.addBrownRice(() -> pan.setTimeout(() -> { range.turnOff(); // ready... }, Duration.ofMinutes(40)))));
Non-blocking Application
![Page 67: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/67.jpg)
Rise above the callbacks
![Page 68: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/68.jpg)
ReactiveX
DeclarativeFunctional, programming onObservable streams
![Page 69: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/69.jpg)
Reactive Streams Specification
Async stream processingwith “reactive” back-pressure
![Page 70: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/70.jpg)
70
public interface Subscriber<T> {
void onSubscribe(Subscription sub);
void onNext(T item);
void onError(Throwable ex);
void onComplete();
}
public interface Subscription {
void request(long n);
void cancel();
}
public interface Publisher<T> {
void subscribe(Subscriber<? super T> subscriber);
}
Reactive Streams
Backpressure
![Page 71: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/71.jpg)
Project Reactor
Reactive Streams + ReactiveX
![Page 72: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/72.jpg)
Reactor Mono
![Page 73: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/73.jpg)
Reactor Flux
![Page 74: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/74.jpg)
Reactive Repository
![Page 75: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/75.jpg)
Subscriber triggers flow of data
Reactive Repository in Use
![Page 76: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/76.jpg)
onSubscribe
request(unbounded)
onNext(User: Jason)
onNext(User: Jay)
...
onComplete()
By default consume without back-pressure
Example output
![Page 77: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/77.jpg)
Consume Two Items at a Time
![Page 78: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/78.jpg)
onSubscribe
request(2)
onNext(User: Jason)
onNext(User: Jay)
request(2)
onNext(User: Joe)
onNext(User: John)
...
Producer complies withback-pressure
Example output
![Page 79: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/79.jpg)
Spring MVC 4.3
Reactive programming for Java devs
Spring 5 Web Reactive
![Page 80: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/80.jpg)
Spring Data Reactive
![Page 81: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/81.jpg)
Spring Data Reactive
![Page 82: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/82.jpg)
Reactive Processing Pipeline
RepositoryControllerWebFramework
HTTP Server
End-to-end back-pressure
![Page 83: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/83.jpg)
Reactive Web Controller
![Page 84: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/84.jpg)
Reactive Web Controller Spring 5
![Page 85: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/85.jpg)
Reactive Web Controller / RxJava Spring 5
![Page 86: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/86.jpg)
Spring Web MVC Spring Web Reactive
@Controller, @RequestMapping
Servlet API
Servlet Container
Reactive HTTP
Tomcat, Jetty, Servlet 3.1+,Netty, Undertow
Router Functions
![Page 87: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/87.jpg)
Reactive HTTP Adaptation
![Page 88: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/88.jpg)
Reactive HTTP Server Adaptation
Tomcat, Jetty, Servlet 3.1+ containers
Netty (Reactor Netty, RxNetty)
Undertow
![Page 89: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/89.jpg)
Reactive Encoder and Decoder
Serialization to/from Flux<T> and Flux<DataBuffer>
JSON (Jackson) and XML (JAXB / Aalto)
Server-Sent Events
Resource with zero-copy file transfer
![Page 90: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/90.jpg)
Along with Spring Web MVC
Operates on reactive HTTP request / response
Shared algorithms and mechanisms
Spring Web Reactive
![Page 91: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/91.jpg)
Non-Blocking HTTP GET
Synchronous, non-blocking method
Async, non-blocking method
![Page 92: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/92.jpg)
Non-Blocking HTTP POST
or
![Page 93: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/93.jpg)
Server-Sent Events
![Page 94: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/94.jpg)
Zero-Copy File Transfer
![Page 95: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/95.jpg)
WebClient
![Page 96: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/96.jpg)
WebClient / RxJava
![Page 97: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/97.jpg)
Non-blocking WebClient Scatter/Gather
![Page 98: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/98.jpg)
Functional Web Framework
No annotations, minimal, and transparent
Same reactive foundation
"Spring 5: Functional Web Framework" blog post
![Page 99: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/99.jpg)
Functional-style Web Routing
![Page 101: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/101.jpg)
Spring Boot “Web Reactive” Starter
Helpful instructions:
https://github.com/bclozel/spring-boot-web-reactive
![Page 102: Spring MVC 4.x Spring 5 Web Reactive Part 1 @rstoya05 ... · Spring MVC 4.3 Reactive programming for Java devs Spring 5 Web Reactive](https://reader034.fdocuments.us/reader034/viewer/2022051806/5ffabfe2e1bec1579e0aad40/html5/thumbnails/102.jpg)
Manual Bootstrap
Only a few lines of code:
Spring Framework 5.0 snapshot reference