44

Erwin de Gier - GOTO Conference · 2018-06-19 · Erwin de Gier Real-world reactive programming in Java @erwindeg github.com/erwindeg edegier.nl

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Erwin de Gier - GOTO Conference · 2018-06-19 · Erwin de Gier Real-world reactive programming in Java @erwindeg github.com/erwindeg edegier.nl
Page 2: Erwin de Gier - GOTO Conference · 2018-06-19 · Erwin de Gier Real-world reactive programming in Java @erwindeg github.com/erwindeg edegier.nl

Erwin de Gier Real-world reactive programming in Java

@erwindeg github.com/erwindeg edegier.nl

Page 3: Erwin de Gier - GOTO Conference · 2018-06-19 · Erwin de Gier Real-world reactive programming in Java @erwindeg github.com/erwindeg edegier.nl
Page 4: Erwin de Gier - GOTO Conference · 2018-06-19 · Erwin de Gier Real-world reactive programming in Java @erwindeg github.com/erwindeg edegier.nl
Page 5: Erwin de Gier - GOTO Conference · 2018-06-19 · Erwin de Gier Real-world reactive programming in Java @erwindeg github.com/erwindeg edegier.nl
Page 6: Erwin de Gier - GOTO Conference · 2018-06-19 · Erwin de Gier Real-world reactive programming in Java @erwindeg github.com/erwindeg edegier.nl
Page 7: Erwin de Gier - GOTO Conference · 2018-06-19 · Erwin de Gier Real-world reactive programming in Java @erwindeg github.com/erwindeg edegier.nl
Page 8: Erwin de Gier - GOTO Conference · 2018-06-19 · Erwin de Gier Real-world reactive programming in Java @erwindeg github.com/erwindeg edegier.nl
Page 9: Erwin de Gier - GOTO Conference · 2018-06-19 · Erwin de Gier Real-world reactive programming in Java @erwindeg github.com/erwindeg edegier.nl
Page 10: Erwin de Gier - GOTO Conference · 2018-06-19 · Erwin de Gier Real-world reactive programming in Java @erwindeg github.com/erwindeg edegier.nl
Page 11: Erwin de Gier - GOTO Conference · 2018-06-19 · Erwin de Gier Real-world reactive programming in Java @erwindeg github.com/erwindeg edegier.nl

Java 8 Streams vs. RX Observables

Pull vs. Push

Finite vs. Infinite

Sync vs. Async

Page 12: Erwin de Gier - GOTO Conference · 2018-06-19 · Erwin de Gier Real-world reactive programming in Java @erwindeg github.com/erwindeg edegier.nl

Observable map() subscribe()

Iterable

Java 8 Streams vs. RX Observables

map()1 2 3 A B C forEach()

1 A2 B3 C

Page 13: Erwin de Gier - GOTO Conference · 2018-06-19 · Erwin de Gier Real-world reactive programming in Java @erwindeg github.com/erwindeg edegier.nl
Page 14: Erwin de Gier - GOTO Conference · 2018-06-19 · Erwin de Gier Real-world reactive programming in Java @erwindeg github.com/erwindeg edegier.nl
Page 15: Erwin de Gier - GOTO Conference · 2018-06-19 · Erwin de Gier Real-world reactive programming in Java @erwindeg github.com/erwindeg edegier.nl
Page 16: Erwin de Gier - GOTO Conference · 2018-06-19 · Erwin de Gier Real-world reactive programming in Java @erwindeg github.com/erwindeg edegier.nl
Page 17: Erwin de Gier - GOTO Conference · 2018-06-19 · Erwin de Gier Real-world reactive programming in Java @erwindeg github.com/erwindeg edegier.nl

Java vs. Reactive Streams

Page 18: Erwin de Gier - GOTO Conference · 2018-06-19 · Erwin de Gier Real-world reactive programming in Java @erwindeg github.com/erwindeg edegier.nl

Java 8 Streams vs. Reactive Streams

//IllegalState Exception

Page 19: Erwin de Gier - GOTO Conference · 2018-06-19 · Erwin de Gier Real-world reactive programming in Java @erwindeg github.com/erwindeg edegier.nl
Page 20: Erwin de Gier - GOTO Conference · 2018-06-19 · Erwin de Gier Real-world reactive programming in Java @erwindeg github.com/erwindeg edegier.nl

Reactive API

File IOHTTP

REST

Event bus

Persistence

Reactive Stack

Page 21: Erwin de Gier - GOTO Conference · 2018-06-19 · Erwin de Gier Real-world reactive programming in Java @erwindeg github.com/erwindeg edegier.nl
Page 22: Erwin de Gier - GOTO Conference · 2018-06-19 · Erwin de Gier Real-world reactive programming in Java @erwindeg github.com/erwindeg edegier.nl

Reactive Frameworks

VS.

Page 23: Erwin de Gier - GOTO Conference · 2018-06-19 · Erwin de Gier Real-world reactive programming in Java @erwindeg github.com/erwindeg edegier.nl

Let

Page 24: Erwin de Gier - GOTO Conference · 2018-06-19 · Erwin de Gier Real-world reactive programming in Java @erwindeg github.com/erwindeg edegier.nl
Page 25: Erwin de Gier - GOTO Conference · 2018-06-19 · Erwin de Gier Real-world reactive programming in Java @erwindeg github.com/erwindeg edegier.nl
Page 26: Erwin de Gier - GOTO Conference · 2018-06-19 · Erwin de Gier Real-world reactive programming in Java @erwindeg github.com/erwindeg edegier.nl
Page 27: Erwin de Gier - GOTO Conference · 2018-06-19 · Erwin de Gier Real-world reactive programming in Java @erwindeg github.com/erwindeg edegier.nl
Page 28: Erwin de Gier - GOTO Conference · 2018-06-19 · Erwin de Gier Real-world reactive programming in Java @erwindeg github.com/erwindeg edegier.nl
Page 29: Erwin de Gier - GOTO Conference · 2018-06-19 · Erwin de Gier Real-world reactive programming in Java @erwindeg github.com/erwindeg edegier.nl
Page 30: Erwin de Gier - GOTO Conference · 2018-06-19 · Erwin de Gier Real-world reactive programming in Java @erwindeg github.com/erwindeg edegier.nl
Page 31: Erwin de Gier - GOTO Conference · 2018-06-19 · Erwin de Gier Real-world reactive programming in Java @erwindeg github.com/erwindeg edegier.nl

Reactive Overview

Framework

API

Event Model Annotations

Project Reactor

Page 32: Erwin de Gier - GOTO Conference · 2018-06-19 · Erwin de Gier Real-world reactive programming in Java @erwindeg github.com/erwindeg edegier.nl

We are Blox

• Crypto positions

• Closed system

• Buy Crypto

• Sell Crypto

• Accounts

Page 33: Erwin de Gier - GOTO Conference · 2018-06-19 · Erwin de Gier Real-world reactive programming in Java @erwindeg github.com/erwindeg edegier.nl

Architecture

Quote

Order

Market Exchange

RESTAPI

Command

Event

Query

RESTQuery

Quote Engine

REST

REST

Page 34: Erwin de Gier - GOTO Conference · 2018-06-19 · Erwin de Gier Real-world reactive programming in Java @erwindeg github.com/erwindeg edegier.nl
Page 35: Erwin de Gier - GOTO Conference · 2018-06-19 · Erwin de Gier Real-world reactive programming in Java @erwindeg github.com/erwindeg edegier.nl

Spring 5 Webflux

• Testing

• Spring Security

• Spring Cloud Hystrix

• Axon API’s: toFuture & fromFuture

Page 36: Erwin de Gier - GOTO Conference · 2018-06-19 · Erwin de Gier Real-world reactive programming in Java @erwindeg github.com/erwindeg edegier.nl

WebFlux Testing

• @WebFluxTest(controllers = …)

• WebTestClient for WebFlux controller tests

• @MockBean for injected services

Page 37: Erwin de Gier - GOTO Conference · 2018-06-19 · Erwin de Gier Real-world reactive programming in Java @erwindeg github.com/erwindeg edegier.nl

Spring Security

• Spring Security OAuth not working (legacy)

• Spring Security 5

•Misses OAuth Resource / Authorization server

Page 38: Erwin de Gier - GOTO Conference · 2018-06-19 · Erwin de Gier Real-world reactive programming in Java @erwindeg github.com/erwindeg edegier.nl

Spring Security

SpringWeb

ZuulProxy

SpringWebFlux

RESTAPI

Auth Header

Response

Page 39: Erwin de Gier - GOTO Conference · 2018-06-19 · Erwin de Gier Real-world reactive programming in Java @erwindeg github.com/erwindeg edegier.nl

Spring Security

• @EnableWebFluxSecurity

• Implement AuthenticationWebFilter

• Use http.addFilterAt(filter,order)

Page 40: Erwin de Gier - GOTO Conference · 2018-06-19 · Erwin de Gier Real-world reactive programming in Java @erwindeg github.com/erwindeg edegier.nl

Spring Cloud Hystrix

• Cannot use the @HystrixCommand

• Use HystrixObservableCommand

• RxJava Observable vs Flux

Page 41: Erwin de Gier - GOTO Conference · 2018-06-19 · Erwin de Gier Real-world reactive programming in Java @erwindeg github.com/erwindeg edegier.nl

Reactive Streams

Page 42: Erwin de Gier - GOTO Conference · 2018-06-19 · Erwin de Gier Real-world reactive programming in Java @erwindeg github.com/erwindeg edegier.nl
Page 43: Erwin de Gier - GOTO Conference · 2018-06-19 · Erwin de Gier Real-world reactive programming in Java @erwindeg github.com/erwindeg edegier.nl

Conclusion: state of reactive Java

• Libraries for reactive programming: Rx / Reactor

• Frameworks for async processes: Spring / Vert.x

• Expect to DIY

• Workarounds

Page 44: Erwin de Gier - GOTO Conference · 2018-06-19 · Erwin de Gier Real-world reactive programming in Java @erwindeg github.com/erwindeg edegier.nl

e