Wprowadzenie do R2DBC
Doświadczenia praktyczne*
Reactive Relational Data Base Connectivity
Systemy Reaktywne
Reactive Manifesto
Responsive
Odpowiedź jest sprawna
Resilient
Odpowiedź jest zrozumiała
Nawet jak jest opisem błędu
Elastic
Komponenty są skalowalne
Najlepiej w zautomatyzowany sposób
Message Driven
Nie ma powiązań pomiędzy komponentami
Reactive system
!=
Reactive Programming
Reactive Data Stream
Backpressure
R2DBC
Okrojone JDBC
ale na sterydach
JDBC + Reactive Wrapper?
Można, ale nie do końca…
- Obsługa błędów
- Skalowalność
- Back pressure
Połączenie
ConnectionFactoryOptions options = ConnectionFactoryOptions.builder() .option(ConnectionFactoryOptions.HOST, "localhost") .option(ConnectionFactoryOptions.PORT, 15432) .option(ConnectionFactoryOptions.DATABASE, "postgres") .option(ConnectionFactoryOptions.USER, "r2dbc") .option(ConnectionFactoryOptions.PASSWORD, "r2dbc") .option(ConnectionFactoryOptions.DRIVER, "postgresql") .build(); ConnectionFactory connectionFactory = ConnectionFactories.get(options); Publisher<? extends Connection> conn = connectionFactory.create();
Zapytanie
Flux.from(conn) .map(c -> c.createStatement(ALL_MEMBERS)) .flatMap(Statement::execute) .flatMap(r -> r.map(memberMapper::fromRow)) .map(Member::getMemId) .blockLast();
Transakcje
ACID
Kto zarządza?
JDBC
Flux.from(conn) .map( c -> { c.beginTransaction(); c.setAutoCommit(true); return c; } ).map( c -> c.createStatement(INSERT_BOOKING) .bind(0, 1) .bind(1, 1) .bind(2, now()) .bind(3, 1) ) .flatMap(Statement::execute) .flatMap(Result::getRowsUpdated) .blockLast();
Typy danych
Praktycznie jak w JDBC
Obsługa błędów
R2dbcException
Spring (🥾)
Jest, działa
Szablony jak JDBC
Reactive WEB
Czego nie robić?
Nie używać Tomcata
Nie mieszać bezpośrednio z JPA
Nie konfigurować wątków „na pałę”
Uważać na wersje zależności
JPA
Da się
Osobne pakiety!
Osobne modele!
CQRS!
Mikroserwisy
Hexagonal Architecture
Q&A
Wprowadzenie do R2DBC
By Bartek Kuczyński
Wprowadzenie do R2DBC
Prezentacja ze spotkania Wrocławskiego JUGa z 29 września 2021. Kod pod adresem https://github.com/Koziolek/wjug-r2dbc
- 185