reactive web applications

52
Unless otherwise indicated, these slides are © 2013-2014 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Stephane Maldini Rossen Stoyanchev

Upload: spring-by-pivotal

Post on 13-Apr-2017

2.420 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Reactive Web Applications

Unless otherwise indicated, these slides are © 2013-2014 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/

Stephane MaldiniRossen Stoyanchev

Page 2: Reactive Web Applications

About the Speakers

•••

Page 3: Reactive Web Applications
Page 4: Reactive Web Applications
Page 5: Reactive Web Applications
Page 6: Reactive Web Applications
Page 7: Reactive Web Applications
Page 8: Reactive Web Applications
Page 9: Reactive Web Applications
Page 10: Reactive Web Applications
Page 12: Reactive Web Applications

ReadListener WriteListener

ServletInputStream ServletOutputStream

• isReady read() write()•

Page 14: Reactive Web Applications

java.util.concurrent

Page 15: Reactive Web Applications

onSubscribe

onNext*(onError|onComplete)?

PublisherSubscriber

Subscription

request(n)cancel()

Page 16: Reactive Web Applications
Page 17: Reactive Web Applications

public interface ServerHttpRequest extends HttpRequest {

Publisher<byte[]> getBody();

}

public interface ServerHttpResponse extends HttpMessage {

Publisher<Void> writeWith(Publisher<byte[]> publisher);

}

Page 18: Reactive Web Applications

public interface ServerHttpRequest extends HttpRequest {

InputStream getBody();

}

public interface ServerHttpResponse extends HttpMessage {

OutputStream getBody();

}

Page 21: Reactive Web Applications
Page 22: Reactive Web Applications
Page 23: Reactive Web Applications
Page 24: Reactive Web Applications
Page 25: Reactive Web Applications
Page 26: Reactive Web Applications
Page 27: Reactive Web Applications

?

?

Page 28: Reactive Web Applications

Publisher<T> <T>

Page 29: Reactive Web Applications

Publisher

Page 30: Reactive Web Applications

Publisher

Streams.just('a' 'b' 'c') .take(2) .map(Character::toUpperCase) .consume(System.out::println);

Page 31: Reactive Web Applications

Observable.just('a', 'b', 'c').take(2).map(Character::toUpperCase).subscribe(System.out::println);

Page 33: Reactive Web Applications

Demo:

HeadFirst

Page 34: Reactive Web Applications

rx.Observable

rx.Subscriber

Page 36: Reactive Web Applications

Publisher

Subscriber

Page 38: Reactive Web Applications
Page 39: Reactive Web Applications

Max(request) == Queue.capacity()

Page 40: Reactive Web Applications

Publisher

Page 41: Reactive Web Applications

Subscriber

Page 42: Reactive Web Applications

Subscription.request(n)

Page 43: Reactive Web Applications
Page 44: Reactive Web Applications
Page 46: Reactive Web Applications

@RequestMapping("/capitalize")@ResponseBodypublic Publisher<Person> capitalize(@RequestBody Publisher<Person> persons) { return persons.map(person -> { person.setName(person.getName().toUpperCase()); return person; });}

Publisher

Page 47: Reactive Web Applications

@RequestMapping("/capitalize")@ResponseBodypublic Stream<Person> capitalize(@RequestBody Stream<Person> persons) { return persons.map(person -> { person.setName(person.getName().toUpperCase()); return person; });}

Stream

Page 48: Reactive Web Applications

@RequestMapping("/capitalize")@ResponseBodypublic Observable<Person> capitalize(@RequestBody Observable<Person> persons) { return persons.map(person -> { person.setName(person.getName().toUpperCase()); return person; });}

Observable

Page 49: Reactive Web Applications
Page 50: Reactive Web Applications

function() {

StreamService.connect("stream")

.flatMap(unpackCsv)

.subscribe(updateUI, logError, logComplete);

}

var unpackCsv = function (ev) {

return Rx.Observable.from(ev.data ? ev.data.split("\n") : [])

.filter(discardEmpty)

.map(csvToJson)

}

Page 51: Reactive Web Applications
Page 52: Reactive Web Applications

Learn More. Stay Connected.

Thank You for Listening!

@smaldini / @rstoya05