SlideShare a Scribd company logo
1 of 166
Reactive APIsReactive APIs
usingusing
LJC – 2017-10-16
David Dawson
me@daviddawson.me
Microservices | JVM | IoT consultant
Organiser, London Microservices User Group,
Founder, Muon Project – http://muoncore.io
http://daviddawson.me
What is the
‘Microservice
Architecture’?
Isolation
Aspiration
What is
Architecture?
What is
Architecture?
Architecture
vs
Design
Architecture
vs
Design
Limitless Options
For Design
Only a few
Architectures
What is
Architecture?
Architecture
Is Philosophy
What is your
Philosophy?
Microservices
Philosophy
software
architecture
emphasising
Change
software
philosophy
emphasising
Change
I heard
about
Reactive ...
What is
Reactive
?
What is
Reactive
Not?
RPC(ish) Microservices
RPC(ish) Microservices
Here Be
Dragons
(and HTTP)
Orders
Orders
Product
Users
Auth
Orders
Product
Users
Auth
Fulfillment
Orders
Product
Users
Auth
Fulfillment
Orders
Product
Users
Auth
Fulfillment
Autonomy!
Orders
Product
Users
Auth
Fulfillment
Orders
Product
Users
Auth
Fulfillment
Orders
Product
Users
Auth
Fulfillment
Order X
Default Product Name: £12
Default Product Name: £99
Default Product Name: £77
Shipping Date: No idea.
Orders
Product
Users
Auth
Fulfillment
This Service is broken
by its dependencies
breaking
Orders
Product
Users
Auth
Fulfillment
99.999% uptime for
each service
5 services in a web
~25 mins/ year
downtime. Guaranteed
Orders
Product
Users
Auth
Fulfillment
System uptime
99.99%
Due to RPC Web
FragileFragile
FragileFragile
Higher LatencyHigher Latency
FragileFragile
Higher LatencyHigher Latency
Data is Relational...Data is Relational...
FragileFragile
Higher LatencyHigher Latency
Data is Relational...Data is Relational...
.... Inner Join over HTTP.... Inner Join over HTTP
RPC APIs + MicroservicesRPC APIs + Microservices
==
Data SilosData Silos
:-(:-(
Reactive
vs
Reactive
Reactive
Reactive Systems
Responsive
Resilient
Elastic
Message Driven
https://www.reactivemanifesto.org/
Reactive Systems
Architectural Guidelines
Reactive Programming
Async
Functional
Data Flow
Event Driven
Implementation Techniques
Reactive Programming
Reactive System
Reactive System
Reactive
Programming
Designing
Reactive Systems
With Great Power....
....comes great responsibility
Using Data
Your data
is here
Using Data
Your data
is here
You need it
here.
Using Data
RPC Fragile, etc ...
Using Data
Materialise
View
Eventually consistent
Resilient
Best performance
Using Data
Client controlled
streaming
Using Data
SEDA – Staged Event
Driven Architecture
Using Data
Scatter/ Gather
Using Data
Event Logs
Reactive Tech Selection
Message Based
Manage State
Reactive Technologies
Actors – Akka/ Logam
SEDA Events – Lambda, Vertx etc
Data Flow/ CSP – Spring Data Flow
Event Logs – Kafka, EventStore.io
What have you
lost?
Reactive Systems
APIs
APIs
==
HTTP
APIs
==
HTTP
Discovery
Docs
(swagger et al)
Well defined
Technical
Interaction model
monitoring
testing
tech
autonomy
HTTP: Technical
Interaction Model HTTP API
"GET me X please"
"Here is X"
APIs
Docs
(swagger et al)
Discovery
Well defined
Technical
Interaction model
monitoring
testing==
HTTP
tech
autonomy
APIs
==
HTTP
Docs
(swagger et al)
Discovery
Well defined
Technical
Interaction model
monitoring
testing
tech
autonomy
APIs
==
HTTP
Docs
(swagger et al)
Discovery
Well defined
Technical
Interaction model
monitoring
testing
:-(:-(
Reactive tech as an
API surrogate
Building a Reactive
System
becomes a
Strategic Choice
APIs
==
HTTP
APIs
==
HTTP
APIs
==
HTTP
Reactive
APIs
Reactive
APIs
Message
Reactive: Technical Interaction Models?
Reactive: Technical Interaction Models?
Reactive
API
Reactive: Technical Interaction Models?
Reactive
API
"I want to trade X for Y"
Reactive: Technical Interaction Models?
Reactive
API
"I want to trade X for Y"
"I offer 10*Y in 2 minutes, or Z now"
Reactive: Technical Interaction Models?
Reactive
API
"I want to trade X for Y"
"I offer 10*Y in 2 minutes, or Z now"
"I'll take 10Y"
Reactive: Technical Interaction Models?
Reactive
API
"I want to trade X for Y"
"I offer 10*Y in 2 minutes, or Z now"
"I'll take 10Y"
"Here is Y"
Reactive: Technical Interaction Models?
Reactive
API
"I want to trade X for Y"
"I offer 10*Y in 2 minutes, or Z now"
"I'll take 10Y"
"Here is Y"
"Here is Y"
"Here is Y"
Reactive: Technical Interaction Models?
Reactive
API
"I want to trade X for Y"
"I offer 10*Y in 2 minutes, or Z now"
"I'll take 10Y"
"Here is Y"
"Here is Y"
"Here is Y"
"Slow down"
Reactive: Technical Interaction Models?
Reactive
API
"I want to trade X for Y"
"I offer 10*Y in 2 minutes, or Z now"
"I'll take 10Y"
"Here is Y"
"Here is Y"
"Here is Y"
"Slow down"
.....
Reactive: Technical Interaction Models?
Technical Messages
and
Domain Messages
[often events]
Reactive: Technical Interaction Models?
Technical Messages
and
Domain Messages
[often events]
Reactive: Technical Interaction Models?
=
reusable
Communication
protocol
Technical Messages
Reactive: Technical Interaction Models?
Reactive
API
"I want to trade X for Y"
"I offer 10*Y in 2 minutes, or Z now"
"I'll take 10Y"
"Here is Y"
"Here is Y"
"Here is Y"
"Slow down"
.....
Reactive: Technical Interaction Models?
Reactive
API
Two Party Negotiation
Client Managed Streaming
APIs
Reactive
APIs
Reactive
APIs
DiscoveryWell defined
Technical
Interaction models
monitoring
testing
Docs
(swagger et al)
DiscoveryWell defined
Technical
Interaction models
monitoring
testing
Docs
(swagger et al)
Example:
Rx from DB
to browser
MongoDB
MongoDB
Microservice?
MongoDB
Browser
Microservice?
Browser
MongoDB
TODO Chrome
Microservice?
Browser
MongoDB
TODO Chrome
Microservice?
Buffering...
Browser
Websockets?
Back pressure?
Ugh :-(
MongoDB
TODO Chrome
Microservice?
Browser
MongoDB
TODO Chrome
Microservice?
Microservice?
MongoDB
Browser
MongoDB
TODO Chrome
Microservice?
Another
websocket?
Microservice?
MongoDB
Browser
The Muon Model
The Muon Model
Discovery
Transport
Network
….
Protocol
Client
channel N
channel
channel channel Service X
Service 2
Service 1
API
App Code
….
1) Your code
uses an API
2) The API
creates a
Protocol
3) The Protocol
communicates
using
messages
4) A transport
routes them over
the network
The Muon Model
Discovery
Transport
Network
….
Protocol
Client
channel N
channel
channel channel Service X
Service 2
Service 1
API
App Code
….
1) Your code
uses an API
2) The API
creates a
Protocol
3) The Protocol
communicates
using
messages
4) A transport
routes them over
the network
The Muon Model
Discovery
Transport
Network
….
Protocol
Client
channel N
channel
channel channel Service X
Service 2
Service 1
API
App Code
….
1) Your code
uses an API
2) The API
creates a
Protocol
3) The Protocol
communicates
using
messages
4) A transport
routes them over
the network
The Muon Model
Discovery
Transport
Network
….
Protocol
Client
channel N
channel
channel channel Service X
Service 2
Service 1
API
App Code
….
1) Your code
uses an API
2) The API
creates a
Protocol
3) The Protocol
communicates
using
messages
4) A transport
routes them over
the network
Solution
Using
Muon
Muon Reactive Streams
A Message based API
using
http://reactivestreams.org
http://github.com/muoncore/stack-reactive-streams
Muon Reactive Streams
Stream Client
Stream Server
Transport
Failure
SubscriptionRequested
SubAck
SubNack
Data
Complete Error
Cancel
Request
Java Server
Muon muon = ...
ReactiveStreamServer rx =
new ReactiveStreamServer(muon);
Publisher<Data> pub = doMongoQuery(…);
muon.publishSource("/my-big-data", COLD, pub);
Muon Reactive Streams
Node Client
muon.subscribe("stream://myservice/my-big-data",
{}, (data) => {
console.log(“I got data “ + data)
}, (error) => {}, () => { // complete});
Muon Reactive Streams
MongoDB
TODO Chrome
Microservice?
Microservice?
MongoDB
Browser
MongoDB
TODO Chrome
Microservice?
Microservice?
MongoDB
Browser
MongoDB
TODO Chrome
Microservice?
Microservice?
MongoDB
Browser
MongoDB
TODO Chrome
Microservice?
Microservice?
MongoDB
Muon
Gateway
Browser
MongoDB
TODO Chrome
Microservice?
Microservice?
MongoDB
Muon
Gateway
1 websocket,
multiplexing
Browser
MongoDB
TODO Chrome
Microservice?
Microservice?
MongoDB
Muon
Gateway
1 websocket,
multiplexing
Internal
comms
AMQP | TCP
| Kafka ...
Browser
Browser Muon?
var Muon = require("muonjs")
var muon = Muon.client({port:9898})
Browser Muon?
var Muon = require("muonjs")
var muon = Muon.client({port:9898})
muon.subscribe("stream://myservice/my-big-data", {},
(data) => {
console.log(“I got data “ + data)
}, (error) => {}, () => { // complete});
Browser Muon?
David!
What about
DDD/ Spring
Boot?
A brief intro
to
Event Logs
Events
?
Events
?
Order PlacedOrder Placed
EventsEvents
Order Placed
Payment Taken
EventsEvents
Order Placed
Payment Taken
Email Sent
EventsEvents
Order Stream EventsEvents
Order Stream
Payment Stream
EventsEvents
Order Stream
Notification Stream
Payment Stream
EventsEvents
Order Stream Events
Order Stream Events
Order
Service
Order Stream Events
Order
Service
Fraud
Service
Order Stream Events
Order
Service
Fraud
Service
Fulfillment
Reactive tech as an
API surrogate?
The Muon Model
Discovery
Transport
Network
….
Protocol
Client
channel N
channel
channel channel Service X
Service 2
Service 1
API
App Code
….
1) Your code
uses an API
2) The API
creates a
Protocol
3) The Protocol
communicates
using
messages
4) A transport
routes them over
the network
Muon Event Log API
A Message based API
http://github.com/muoncore/stack-events
Java Client
Muon muon = getMuon();
EventClient client = new DefaultEventClient(muon);
Order order = ...
client.event(
ClientEvent.ofType("OrderPlaced")
.payload(order)
.stream("/orders").build())
Muon Event Log API
Java Client
Muon muon = getMuon();
EventClient client = new DefaultEventClient(muon);
Subscriber<Event> s = … (RxJava, Reactor etc)
client.replay("/requests", REPLAY_ONLY, s);
Muon Event Log API
Building on the
Event API
Newton
http://github.com/muoncore/newton
DDD patterns onDDD patterns on
Muon Event APIMuon Event API
JVM onlyJVM only
Currently,Currently,
Spring Boot FocusedSpring Boot Focused
compile "io.muoncore:muon-core:7.4.1"
compile 'io.muoncore.newton:newton-core:0.0.13'
compile 'io.muoncore.newton:newton-spring-starter:0.0.13'
….
@SpringBootApplication
@Configuration
@EnableNewton
class MyApplication {
static void main(args) {
SpringApplication.run(MyApplication, args)
}
}
Setup
Aggregate RootsAggregate Roots
Part of the C in CQRS
Transactional Components
A Web of Objects, loaded as a Unit
Machines to turn Commands into Events
User: 1
Aggregate RootsAggregate Roots
Events
UserCreated
UserNameUpdated
UserActivated
Stream contains events for a single
User/ entity
Aggregate RootsAggregate Roots
class User extends AggregateRoot<String> {
private String email;
private boolean active;
private String id;
User(String email) {
raiseEvent(new UserCreated(email));
}
public void activateAccount() { raiseEvent(new UserRegistrationConfirmed(id)); }
public void delete() { raiseEvent(new UserDeleted(id)); }
@EventHandler
public void on(UserCreated ev) {
id = ev.getId();
Email = ev.getEmail();
}
@EventHandler
public void on(UserRegistrationConfirmed ev) {
active = true
}
}
Aggregate RootsAggregate Roots
class User extends AggregateRoot<String> {
private String email;
private boolean active;
private String id;
User(String email) {
raiseEvent(new UserCreated(email));
}
public void activateAccount() { raiseEvent(new UserRegistrationConfirmed(id)); }
public void delete() { raiseEvent(new UserDeleted(id)); }
@EventHandler
public void on(UserCreated ev) {
id = ev.getId();
Email = ev.getEmail();
}
@EventHandler
public void on(UserRegistrationConfirmed ev) {
active = true
}
}
Aggregate RootsAggregate Roots
class User extends AggregateRoot<String> {
private String email;
private boolean active;
private String id;
User(String email) {
raiseEvent(new UserCreated(email));
}
public void activateAccount() { raiseEvent(new UserRegistrationConfirmed(id)); }
public void delete() { raiseEvent(new UserDeleted(id)); }
@EventHandler
public void on(UserCreated ev) {
id = ev.getId();
Email = ev.getEmail();
}
@EventHandler
public void on(UserRegistrationConfirmed ev) {
active = true
}
}
Aggregate RootsAggregate Roots
@Autowired
EventSourceRepository<User> repo;
…
repo.newInstance(()-> new User(“someone@hello.com”));
User user = repo.load(id);
user.activateAccount();
repo.save(user); ← Events emitted here
Event ViewsEvent Views
The Q in CQRS
Materialise a data structure from event
streams
Provide Queries on it
Order Stream
Order
Service
Fraud
Service
Fulfillment
Event ViewsEvent Views
Event ViewsEvent Views
@Component
public class UserInfoView extends SharedDatastoreView {
private MongoTemplate mongoTemplate;
// constructor & others ommitted
public protected String[] eventStreams() { return new String[] { “/user” } }
public UserInfo findById(String id) {
return mongoTemplate.findById(id, UserInfo.class);
}
public List<TaskView> listAll() {
return mongoTemplate.findAll(UserInfo.class);
}
@EventHandler
public void handle(UserCreatedEvent event) {
mongoTemplate.save(new UserInfo(event.getId(), event.getEmail()));
}
Process ManagersProcess Managers
Manage event based distributed workflows
Machine to turn Events into Commands
Process ManagersProcess Managers
@Scope("prototype")
@Component
@SagaStreamConfig(aggregateRoots = {User.class})
public class UserRegistrationProcess extends StatefulSaga {
@StartSagaWith
public void start(UserCreatedEvent event) {
notifyOn(TaskDescriptionChangedEvent.class, "id", event.getId().toString());
raiseCommand(CommandIntent.builder(EmailUserInfo.class.getName())
.id(event.getId())
.build()
);
}
@EventHandler
public void handle(UserRegistrationConfirmed event) {
raiseCommand(CommandIntent.builder(EmailConfirmation.class.getName())
.id(event.getId())
.build()
);
end();
}
}
Thoughts
Thoughts
Uses Muon Event Log API.
Thoughts
Uses Muon Event Log API.
All Muon implementations can
contribute/ consume data (jvm, node, browser etc)
Thoughts
Uses Muon Event Log API.
All Muon implementations can
contribute/ consume data (jvm, node, browser etc)
Runs on any event store
that implements the Muon Event Log API
Event Log API
==
Less Strategic
Decisions
There's more...
me@daviddawson.me http://muoncore.io
There's more...
More types of API available ...
me@daviddawson.me http://muoncore.io
There's more...
More types of API available ...
Multiple transports available
me@daviddawson.me http://muoncore.io
There's more...
More types of API available ...
Multiple transports available
Any infrastructure you like!
me@daviddawson.me http://muoncore.io
There's more...
More types of API available ...
Multiple transports available
Any infrastructure you like!
Want to extend/ contribute? Join us at
me@daviddawson.me http://muoncore.io
Hire me?
Freelance, remote preferred!
JVM, Node, IoT, Microservices.
me@daviddawson.me
me@daviddawson.me http://muoncore.io
Thanks!
.... questions?

More Related Content

Similar to Reactive APIs for Microservices Using Reactive Streams

DevOps on AWS: Deep Dive on Continuous Delivery and the AWS Developer Tools
DevOps on AWS: Deep Dive on Continuous Delivery and the AWS Developer ToolsDevOps on AWS: Deep Dive on Continuous Delivery and the AWS Developer Tools
DevOps on AWS: Deep Dive on Continuous Delivery and the AWS Developer ToolsAmazon Web Services
 
Experiencing Kinetic Mobile Interaction
Experiencing Kinetic Mobile InteractionExperiencing Kinetic Mobile Interaction
Experiencing Kinetic Mobile InteractionDominique Guinard
 
Intro to Muon - How to build Polyglot Message and Event Microservices
Intro to Muon - How to build Polyglot Message and Event MicroservicesIntro to Muon - How to build Polyglot Message and Event Microservices
Intro to Muon - How to build Polyglot Message and Event MicroservicesDavid Dawson
 
Evolution of the Netflix API
Evolution of the Netflix APIEvolution of the Netflix API
Evolution of the Netflix APIC4Media
 
Cloud iot-new-software-requirements
Cloud iot-new-software-requirementsCloud iot-new-software-requirements
Cloud iot-new-software-requirementsRoberto C. Mayer
 
Pros and Cons of a MicroServices Architecture talk at AWS ReInvent
Pros and Cons of a MicroServices Architecture talk at AWS ReInventPros and Cons of a MicroServices Architecture talk at AWS ReInvent
Pros and Cons of a MicroServices Architecture talk at AWS ReInventSudhir Tonse
 
Offline First in React Native
Offline First in React NativeOffline First in React Native
Offline First in React NativeJosh Warwick
 
QConSF2016-JoshEvans-MasteringChaosANetflixGuidetoMicroservices-compressed.pdf
QConSF2016-JoshEvans-MasteringChaosANetflixGuidetoMicroservices-compressed.pdfQConSF2016-JoshEvans-MasteringChaosANetflixGuidetoMicroservices-compressed.pdf
QConSF2016-JoshEvans-MasteringChaosANetflixGuidetoMicroservices-compressed.pdfSimranjyotSuri
 
Mastering Chaos - A Netflix Guide to Microservices
Mastering Chaos - A Netflix Guide to MicroservicesMastering Chaos - A Netflix Guide to Microservices
Mastering Chaos - A Netflix Guide to MicroservicesJosh Evans
 
Microservices for the Masses with Spring Boot and JHipster - Chicago JUG 2018
Microservices for the Masses with Spring Boot and JHipster - Chicago JUG 2018Microservices for the Masses with Spring Boot and JHipster - Chicago JUG 2018
Microservices for the Masses with Spring Boot and JHipster - Chicago JUG 2018Matt Raible
 
Welcome to the world of micro-apps
Welcome to the world of micro-appsWelcome to the world of micro-apps
Welcome to the world of micro-appsSander Hoogendoorn
 
Microservices rubyconf-2013
Microservices rubyconf-2013Microservices rubyconf-2013
Microservices rubyconf-2013Mohit Thatte
 
Microservices - Peixe Urbano Tech Talks
Microservices - Peixe Urbano Tech TalksMicroservices - Peixe Urbano Tech Talks
Microservices - Peixe Urbano Tech TalksPedro Mendes
 
Start Up Austin 2017: If How and When to Adopt Microservices
Start Up Austin 2017: If How and When to Adopt MicroservicesStart Up Austin 2017: If How and When to Adopt Microservices
Start Up Austin 2017: If How and When to Adopt MicroservicesAmazon Web Services
 
Reactive Java Robotics & IoT with Spring Reactor
Reactive Java Robotics & IoT with Spring ReactorReactive Java Robotics & IoT with Spring Reactor
Reactive Java Robotics & IoT with Spring ReactorTrayan Iliev
 
Building frameworks: from concept to completion
Building frameworks: from concept to completionBuilding frameworks: from concept to completion
Building frameworks: from concept to completionRuben Goncalves
 

Similar to Reactive APIs for Microservices Using Reactive Streams (20)

Introduction to Microservices
Introduction to MicroservicesIntroduction to Microservices
Introduction to Microservices
 
DevOps on AWS: Deep Dive on Continuous Delivery and the AWS Developer Tools
DevOps on AWS: Deep Dive on Continuous Delivery and the AWS Developer ToolsDevOps on AWS: Deep Dive on Continuous Delivery and the AWS Developer Tools
DevOps on AWS: Deep Dive on Continuous Delivery and the AWS Developer Tools
 
Experiencing Kinetic Mobile Interaction
Experiencing Kinetic Mobile InteractionExperiencing Kinetic Mobile Interaction
Experiencing Kinetic Mobile Interaction
 
Introduction to Microservices
Introduction to MicroservicesIntroduction to Microservices
Introduction to Microservices
 
Intro to Muon - How to build Polyglot Message and Event Microservices
Intro to Muon - How to build Polyglot Message and Event MicroservicesIntro to Muon - How to build Polyglot Message and Event Microservices
Intro to Muon - How to build Polyglot Message and Event Microservices
 
Evolution of the Netflix API
Evolution of the Netflix APIEvolution of the Netflix API
Evolution of the Netflix API
 
Introduction to Microservices
Introduction to MicroservicesIntroduction to Microservices
Introduction to Microservices
 
Cloud iot-new-software-requirements
Cloud iot-new-software-requirementsCloud iot-new-software-requirements
Cloud iot-new-software-requirements
 
Pros and Cons of a MicroServices Architecture talk at AWS ReInvent
Pros and Cons of a MicroServices Architecture talk at AWS ReInventPros and Cons of a MicroServices Architecture talk at AWS ReInvent
Pros and Cons of a MicroServices Architecture talk at AWS ReInvent
 
Offline First in React Native
Offline First in React NativeOffline First in React Native
Offline First in React Native
 
QConSF2016-JoshEvans-MasteringChaosANetflixGuidetoMicroservices-compressed.pdf
QConSF2016-JoshEvans-MasteringChaosANetflixGuidetoMicroservices-compressed.pdfQConSF2016-JoshEvans-MasteringChaosANetflixGuidetoMicroservices-compressed.pdf
QConSF2016-JoshEvans-MasteringChaosANetflixGuidetoMicroservices-compressed.pdf
 
Mastering Chaos - A Netflix Guide to Microservices
Mastering Chaos - A Netflix Guide to MicroservicesMastering Chaos - A Netflix Guide to Microservices
Mastering Chaos - A Netflix Guide to Microservices
 
Microservices for the Masses with Spring Boot and JHipster - Chicago JUG 2018
Microservices for the Masses with Spring Boot and JHipster - Chicago JUG 2018Microservices for the Masses with Spring Boot and JHipster - Chicago JUG 2018
Microservices for the Masses with Spring Boot and JHipster - Chicago JUG 2018
 
Welcome to the world of micro-apps
Welcome to the world of micro-appsWelcome to the world of micro-apps
Welcome to the world of micro-apps
 
Future Internet of Things
Future Internet of ThingsFuture Internet of Things
Future Internet of Things
 
Microservices rubyconf-2013
Microservices rubyconf-2013Microservices rubyconf-2013
Microservices rubyconf-2013
 
Microservices - Peixe Urbano Tech Talks
Microservices - Peixe Urbano Tech TalksMicroservices - Peixe Urbano Tech Talks
Microservices - Peixe Urbano Tech Talks
 
Start Up Austin 2017: If How and When to Adopt Microservices
Start Up Austin 2017: If How and When to Adopt MicroservicesStart Up Austin 2017: If How and When to Adopt Microservices
Start Up Austin 2017: If How and When to Adopt Microservices
 
Reactive Java Robotics & IoT with Spring Reactor
Reactive Java Robotics & IoT with Spring ReactorReactive Java Robotics & IoT with Spring Reactor
Reactive Java Robotics & IoT with Spring Reactor
 
Building frameworks: from concept to completion
Building frameworks: from concept to completionBuilding frameworks: from concept to completion
Building frameworks: from concept to completion
 

More from David Dawson

Practical Event Systems - Microservices for the Data Architect
Practical Event Systems - Microservices for the Data ArchitectPractical Event Systems - Microservices for the Data Architect
Practical Event Systems - Microservices for the Data ArchitectDavid Dawson
 
Microservices Past, Present, Future
Microservices Past, Present, FutureMicroservices Past, Present, Future
Microservices Past, Present, FutureDavid Dawson
 
Microservices Pain: Testing
Microservices Pain: TestingMicroservices Pain: Testing
Microservices Pain: TestingDavid Dawson
 
Effective Microservices Design using Events and Event Sourcing
Effective Microservices Design using Events and Event SourcingEffective Microservices Design using Events and Event Sourcing
Effective Microservices Design using Events and Event SourcingDavid Dawson
 
Assorted Learnings of Microservices
Assorted Learnings of MicroservicesAssorted Learnings of Microservices
Assorted Learnings of MicroservicesDavid Dawson
 
DDD & Microservices from the Front Lines: Building Evolvable Software with Ev...
DDD & Microservices from the Front Lines: Building Evolvable Software with Ev...DDD & Microservices from the Front Lines: Building Evolvable Software with Ev...
DDD & Microservices from the Front Lines: Building Evolvable Software with Ev...David Dawson
 
Hexagonal Architecture using Grails
Hexagonal Architecture using GrailsHexagonal Architecture using Grails
Hexagonal Architecture using GrailsDavid Dawson
 
Groovy Architectural Flexibility
Groovy Architectural FlexibilityGroovy Architectural Flexibility
Groovy Architectural FlexibilityDavid Dawson
 

More from David Dawson (8)

Practical Event Systems - Microservices for the Data Architect
Practical Event Systems - Microservices for the Data ArchitectPractical Event Systems - Microservices for the Data Architect
Practical Event Systems - Microservices for the Data Architect
 
Microservices Past, Present, Future
Microservices Past, Present, FutureMicroservices Past, Present, Future
Microservices Past, Present, Future
 
Microservices Pain: Testing
Microservices Pain: TestingMicroservices Pain: Testing
Microservices Pain: Testing
 
Effective Microservices Design using Events and Event Sourcing
Effective Microservices Design using Events and Event SourcingEffective Microservices Design using Events and Event Sourcing
Effective Microservices Design using Events and Event Sourcing
 
Assorted Learnings of Microservices
Assorted Learnings of MicroservicesAssorted Learnings of Microservices
Assorted Learnings of Microservices
 
DDD & Microservices from the Front Lines: Building Evolvable Software with Ev...
DDD & Microservices from the Front Lines: Building Evolvable Software with Ev...DDD & Microservices from the Front Lines: Building Evolvable Software with Ev...
DDD & Microservices from the Front Lines: Building Evolvable Software with Ev...
 
Hexagonal Architecture using Grails
Hexagonal Architecture using GrailsHexagonal Architecture using Grails
Hexagonal Architecture using Grails
 
Groovy Architectural Flexibility
Groovy Architectural FlexibilityGroovy Architectural Flexibility
Groovy Architectural Flexibility
 

Recently uploaded

Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataBradBedford3
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsArshad QA
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxbodapatigopi8531
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Modelsaagamshah0812
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionSolGuruz
 
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantSalesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantAxelRicardoTrocheRiq
 
Project Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationProject Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationkaushalgiri8080
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsAndolasoft Inc
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...OnePlan Solutions
 
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...soniya singh
 
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️anilsa9823
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsAlberto González Trastoy
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providermohitmore19
 
why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfwhy an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfjoe51371421
 
Test Automation Strategy for Frontend and Backend
Test Automation Strategy for Frontend and BackendTest Automation Strategy for Frontend and Backend
Test Automation Strategy for Frontend and BackendArshad QA
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)OPEN KNOWLEDGE GmbH
 
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfThe Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfkalichargn70th171
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerThousandEyes
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...harshavardhanraghave
 

Recently uploaded (20)

Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptx
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with Precision
 
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantSalesforce Certified Field Service Consultant
Salesforce Certified Field Service Consultant
 
Project Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationProject Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanation
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.js
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
 
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
 
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfwhy an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdf
 
Test Automation Strategy for Frontend and Backend
Test Automation Strategy for Frontend and BackendTest Automation Strategy for Frontend and Backend
Test Automation Strategy for Frontend and Backend
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)
 
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfThe Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
 
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
 

Reactive APIs for Microservices Using Reactive Streams

Editor's Notes

  1. Isolation! Aspiration Evolution Ability to change
  2. Dan North Bounded/ Centred Community
  3. Not the solution! An approach to solving the problem. Tools to engage the world Sounds familiar.
  4. h
  5. Ask the audience. One big one.
  6. Some say XXX This is what we are going to discuss! Understand a man by walking in his shoes
  7. Some say XXX This is what we are going to discuss! Understand a man by walking in his shoes
  8. Some say XXX This is what we are going to discuss! Understand a man by walking in his shoes
  9. Some say XXX This is what we are going to discuss! Understand a man by walking in his shoes
  10. Some say XXX This is what we are going to discuss! Understand a man by walking in his shoes
  11. Some say XXX This is what we are going to discuss! Understand a man by walking in his shoes
  12. Some say XXX This is what we are going to discuss! Understand a man by walking in his shoes
  13. Some say XXX This is what we are going to discuss! Understand a man by walking in his shoes
  14. Some say XXX This is what we are going to discuss! Understand a man by walking in his shoes
  15. Some say XXX This is what we are going to discuss! Understand a man by walking in his shoes
  16. Some say XXX This is what we are going to discuss! Understand a man by walking in his shoes
  17. Some say XXX This is what we are going to discuss! Understand a man by walking in his shoes
  18. Ask the audience. One big one.
  19. Ask the audience. One big one.
  20. Ask the audience. One big one.
  21. Ask the audience. One big one.
  22. Ask the audience. One big one.
  23. Ask the audience. One big one.
  24. Ask the audience. One big one.
  25. Ask the audience. One big one.
  26. Ask the audience. One big one.
  27. Ask the audience. One big one.
  28. Ask the audience. One big one.
  29. Ask the audience. One big one.
  30. Ask the audience. One big one.