WHEN MICROSERVICES MEET EVENT SOURCING€¦ · WHEN MICROSERVICES MEET EVENT SOURCING Vinicius...
Transcript of WHEN MICROSERVICES MEET EVENT SOURCING€¦ · WHEN MICROSERVICES MEET EVENT SOURCING Vinicius...
![Page 1: WHEN MICROSERVICES MEET EVENT SOURCING€¦ · WHEN MICROSERVICES MEET EVENT SOURCING Vinicius Gomes 57. Title: tw-tech-talks-2017-05-11 copy.key Created Date: 6/21/2017 7:00:47 PM](https://reader036.fdocuments.in/reader036/viewer/2022081611/5f0bad117e708231d431abb0/html5/thumbnails/1.jpg)
WHEN MICROSERVICES MEET EVENT SOURCINGVinicius Gomes
1
![Page 2: WHEN MICROSERVICES MEET EVENT SOURCING€¦ · WHEN MICROSERVICES MEET EVENT SOURCING Vinicius Gomes 57. Title: tw-tech-talks-2017-05-11 copy.key Created Date: 6/21/2017 7:00:47 PM](https://reader036.fdocuments.in/reader036/viewer/2022081611/5f0bad117e708231d431abb0/html5/thumbnails/2.jpg)
VINICIUS GOMES
Software developer at ThoughtWorks
vvgomes.com/blog
twitter.com/vvgomes
2
![Page 3: WHEN MICROSERVICES MEET EVENT SOURCING€¦ · WHEN MICROSERVICES MEET EVENT SOURCING Vinicius Gomes 57. Title: tw-tech-talks-2017-05-11 copy.key Created Date: 6/21/2017 7:00:47 PM](https://reader036.fdocuments.in/reader036/viewer/2022081611/5f0bad117e708231d431abb0/html5/thumbnails/3.jpg)
AGENDA
The Traditional Approach
Introduction to Event Sourcing
CQRS
Demo
Summary
3
![Page 4: WHEN MICROSERVICES MEET EVENT SOURCING€¦ · WHEN MICROSERVICES MEET EVENT SOURCING Vinicius Gomes 57. Title: tw-tech-talks-2017-05-11 copy.key Created Date: 6/21/2017 7:00:47 PM](https://reader036.fdocuments.in/reader036/viewer/2022081611/5f0bad117e708231d431abb0/html5/thumbnails/4.jpg)
THE TRADITIONAL APPROACH
4
![Page 5: WHEN MICROSERVICES MEET EVENT SOURCING€¦ · WHEN MICROSERVICES MEET EVENT SOURCING Vinicius Gomes 57. Title: tw-tech-talks-2017-05-11 copy.key Created Date: 6/21/2017 7:00:47 PM](https://reader036.fdocuments.in/reader036/viewer/2022081611/5f0bad117e708231d431abb0/html5/thumbnails/5.jpg)
EXAMPLE
Online Restaurant
5
![Page 6: WHEN MICROSERVICES MEET EVENT SOURCING€¦ · WHEN MICROSERVICES MEET EVENT SOURCING Vinicius Gomes 57. Title: tw-tech-talks-2017-05-11 copy.key Created Date: 6/21/2017 7:00:47 PM](https://reader036.fdocuments.in/reader036/viewer/2022081611/5f0bad117e708231d431abb0/html5/thumbnails/6.jpg)
ONLINE RESTAURANT
Data Model
6
![Page 7: WHEN MICROSERVICES MEET EVENT SOURCING€¦ · WHEN MICROSERVICES MEET EVENT SOURCING Vinicius Gomes 57. Title: tw-tech-talks-2017-05-11 copy.key Created Date: 6/21/2017 7:00:47 PM](https://reader036.fdocuments.in/reader036/viewer/2022081611/5f0bad117e708231d431abb0/html5/thumbnails/7.jpg)
ONLINE RESTAURANT
Services
7
![Page 8: WHEN MICROSERVICES MEET EVENT SOURCING€¦ · WHEN MICROSERVICES MEET EVENT SOURCING Vinicius Gomes 57. Title: tw-tech-talks-2017-05-11 copy.key Created Date: 6/21/2017 7:00:47 PM](https://reader036.fdocuments.in/reader036/viewer/2022081611/5f0bad117e708231d431abb0/html5/thumbnails/8.jpg)
Restaurant
ONLINE RESTAURANT
8
📱POST
GET
I want to open an order!
200 ✔
![Page 9: WHEN MICROSERVICES MEET EVENT SOURCING€¦ · WHEN MICROSERVICES MEET EVENT SOURCING Vinicius Gomes 57. Title: tw-tech-talks-2017-05-11 copy.key Created Date: 6/21/2017 7:00:47 PM](https://reader036.fdocuments.in/reader036/viewer/2022081611/5f0bad117e708231d431abb0/html5/thumbnails/9.jpg)
Restaurant
ONLINE RESTAURANT
9
📱POST
GET
I want to add an item to
my order!
200 ✔
![Page 10: WHEN MICROSERVICES MEET EVENT SOURCING€¦ · WHEN MICROSERVICES MEET EVENT SOURCING Vinicius Gomes 57. Title: tw-tech-talks-2017-05-11 copy.key Created Date: 6/21/2017 7:00:47 PM](https://reader036.fdocuments.in/reader036/viewer/2022081611/5f0bad117e708231d431abb0/html5/thumbnails/10.jpg)
THE TRADITIONAL APPROACH
• Simple to implement
• Technology agnostic
10
GET POST PUT
DELETE
![Page 11: WHEN MICROSERVICES MEET EVENT SOURCING€¦ · WHEN MICROSERVICES MEET EVENT SOURCING Vinicius Gomes 57. Title: tw-tech-talks-2017-05-11 copy.key Created Date: 6/21/2017 7:00:47 PM](https://reader036.fdocuments.in/reader036/viewer/2022081611/5f0bad117e708231d431abb0/html5/thumbnails/11.jpg)
CHALLENGES
11
![Page 12: WHEN MICROSERVICES MEET EVENT SOURCING€¦ · WHEN MICROSERVICES MEET EVENT SOURCING Vinicius Gomes 57. Title: tw-tech-talks-2017-05-11 copy.key Created Date: 6/21/2017 7:00:47 PM](https://reader036.fdocuments.in/reader036/viewer/2022081611/5f0bad117e708231d431abb0/html5/thumbnails/12.jpg)
CHALLENGES
Coupling
12
![Page 13: WHEN MICROSERVICES MEET EVENT SOURCING€¦ · WHEN MICROSERVICES MEET EVENT SOURCING Vinicius Gomes 57. Title: tw-tech-talks-2017-05-11 copy.key Created Date: 6/21/2017 7:00:47 PM](https://reader036.fdocuments.in/reader036/viewer/2022081611/5f0bad117e708231d431abb0/html5/thumbnails/13.jpg)
CHALLENGES
Coupling
Resilience
13
Restaurant
📱POST
GET
I want to add an item to my order!
503👎
![Page 14: WHEN MICROSERVICES MEET EVENT SOURCING€¦ · WHEN MICROSERVICES MEET EVENT SOURCING Vinicius Gomes 57. Title: tw-tech-talks-2017-05-11 copy.key Created Date: 6/21/2017 7:00:47 PM](https://reader036.fdocuments.in/reader036/viewer/2022081611/5f0bad117e708231d431abb0/html5/thumbnails/14.jpg)
CHALLENGES
Coupling
Resilience
Response time
14
![Page 15: WHEN MICROSERVICES MEET EVENT SOURCING€¦ · WHEN MICROSERVICES MEET EVENT SOURCING Vinicius Gomes 57. Title: tw-tech-talks-2017-05-11 copy.key Created Date: 6/21/2017 7:00:47 PM](https://reader036.fdocuments.in/reader036/viewer/2022081611/5f0bad117e708231d431abb0/html5/thumbnails/15.jpg)
CHALLENGES
Coupling
Resilience
Response time
User intent
15
POST /orders/8659a0d6/items/
Add item to order
![Page 16: WHEN MICROSERVICES MEET EVENT SOURCING€¦ · WHEN MICROSERVICES MEET EVENT SOURCING Vinicius Gomes 57. Title: tw-tech-talks-2017-05-11 copy.key Created Date: 6/21/2017 7:00:47 PM](https://reader036.fdocuments.in/reader036/viewer/2022081611/5f0bad117e708231d431abb0/html5/thumbnails/16.jpg)
CHALLENGES
Coupling
Resilience
Response time
User intent
Current / mutable state
16
{ "id": “6a208c41…”, "status": "OPEN", "items": [ { "id": “be596c8e…”, "quantity": 1 }, { "id": “5d09509c…”, "quantity": 2 }, { "id": “cc52d1b6…”, "quantity": 1 } ] }
![Page 17: WHEN MICROSERVICES MEET EVENT SOURCING€¦ · WHEN MICROSERVICES MEET EVENT SOURCING Vinicius Gomes 57. Title: tw-tech-talks-2017-05-11 copy.key Created Date: 6/21/2017 7:00:47 PM](https://reader036.fdocuments.in/reader036/viewer/2022081611/5f0bad117e708231d431abb0/html5/thumbnails/17.jpg)
EVENT SOURCING
17
![Page 18: WHEN MICROSERVICES MEET EVENT SOURCING€¦ · WHEN MICROSERVICES MEET EVENT SOURCING Vinicius Gomes 57. Title: tw-tech-talks-2017-05-11 copy.key Created Date: 6/21/2017 7:00:47 PM](https://reader036.fdocuments.in/reader036/viewer/2022081611/5f0bad117e708231d431abb0/html5/thumbnails/18.jpg)
EVENT SOURCING
18
![Page 19: WHEN MICROSERVICES MEET EVENT SOURCING€¦ · WHEN MICROSERVICES MEET EVENT SOURCING Vinicius Gomes 57. Title: tw-tech-talks-2017-05-11 copy.key Created Date: 6/21/2017 7:00:47 PM](https://reader036.fdocuments.in/reader036/viewer/2022081611/5f0bad117e708231d431abb0/html5/thumbnails/19.jpg)
DOMAIN EVENTS
19
{ "payload": { "orderId": “be596c8e…”, "itemId": “5d09509c…”, "quantity": 1 }, "payloadType": “com.restaurant.ItemAddedToOrderEvent”, "timestamp": “2017-03-25 08:48:51 -03:00”, "revision": “2”, "aggregateId": “6a208c41…”
}
Model the past
Immutable
Permanent
![Page 20: WHEN MICROSERVICES MEET EVENT SOURCING€¦ · WHEN MICROSERVICES MEET EVENT SOURCING Vinicius Gomes 57. Title: tw-tech-talks-2017-05-11 copy.key Created Date: 6/21/2017 7:00:47 PM](https://reader036.fdocuments.in/reader036/viewer/2022081611/5f0bad117e708231d431abb0/html5/thumbnails/20.jpg)
EVENT STORE
Append only
Sequential
Long-lived
20
![Page 21: WHEN MICROSERVICES MEET EVENT SOURCING€¦ · WHEN MICROSERVICES MEET EVENT SOURCING Vinicius Gomes 57. Title: tw-tech-talks-2017-05-11 copy.key Created Date: 6/21/2017 7:00:47 PM](https://reader036.fdocuments.in/reader036/viewer/2022081611/5f0bad117e708231d431abb0/html5/thumbnails/21.jpg)
AGGREGATES
21
state = reduce(handle, {}, events)
Reducer function
Reducing events into state
![Page 22: WHEN MICROSERVICES MEET EVENT SOURCING€¦ · WHEN MICROSERVICES MEET EVENT SOURCING Vinicius Gomes 57. Title: tw-tech-talks-2017-05-11 copy.key Created Date: 6/21/2017 7:00:47 PM](https://reader036.fdocuments.in/reader036/viewer/2022081611/5f0bad117e708231d431abb0/html5/thumbnails/22.jpg)
AGGREGATES
Example
22
{ }
![Page 23: WHEN MICROSERVICES MEET EVENT SOURCING€¦ · WHEN MICROSERVICES MEET EVENT SOURCING Vinicius Gomes 57. Title: tw-tech-talks-2017-05-11 copy.key Created Date: 6/21/2017 7:00:47 PM](https://reader036.fdocuments.in/reader036/viewer/2022081611/5f0bad117e708231d431abb0/html5/thumbnails/23.jpg)
AGGREGATES
Example
23
payload: { id: “42” }
{ "id": “42”, "status": "OPEN", "items": [ ] }
![Page 24: WHEN MICROSERVICES MEET EVENT SOURCING€¦ · WHEN MICROSERVICES MEET EVENT SOURCING Vinicius Gomes 57. Title: tw-tech-talks-2017-05-11 copy.key Created Date: 6/21/2017 7:00:47 PM](https://reader036.fdocuments.in/reader036/viewer/2022081611/5f0bad117e708231d431abb0/html5/thumbnails/24.jpg)
AGGREGATES
Example
24
{ "id": “42”, "status": "OPEN", "items": [
{ "id": “43”, “quantity": 1
} ] }
payload: { orderId: “42”, itemId: “43”, quantity: 1 }
![Page 25: WHEN MICROSERVICES MEET EVENT SOURCING€¦ · WHEN MICROSERVICES MEET EVENT SOURCING Vinicius Gomes 57. Title: tw-tech-talks-2017-05-11 copy.key Created Date: 6/21/2017 7:00:47 PM](https://reader036.fdocuments.in/reader036/viewer/2022081611/5f0bad117e708231d431abb0/html5/thumbnails/25.jpg)
payload: { orderId: “42”, itemId: “44”, quantity: 2 }
AGGREGATES
Example
25
{ "id": “42”, "status": "OPEN", "items": [
{ "id": “43”, “quantity": 1
}, { "id": “44”, “quantity": 2
} ] }
![Page 26: WHEN MICROSERVICES MEET EVENT SOURCING€¦ · WHEN MICROSERVICES MEET EVENT SOURCING Vinicius Gomes 57. Title: tw-tech-talks-2017-05-11 copy.key Created Date: 6/21/2017 7:00:47 PM](https://reader036.fdocuments.in/reader036/viewer/2022081611/5f0bad117e708231d431abb0/html5/thumbnails/26.jpg)
AGGREGATES
Example
26
{ "id": “42”, "status": "OPEN", "items": [
{ "id": “44”, “quantity": 2
} ] }
payload: { orderId: “42”, itemId: “43” }
![Page 27: WHEN MICROSERVICES MEET EVENT SOURCING€¦ · WHEN MICROSERVICES MEET EVENT SOURCING Vinicius Gomes 57. Title: tw-tech-talks-2017-05-11 copy.key Created Date: 6/21/2017 7:00:47 PM](https://reader036.fdocuments.in/reader036/viewer/2022081611/5f0bad117e708231d431abb0/html5/thumbnails/27.jpg)
AGGREGATES
Example
27
{ "id": “42”, "status": "PLACED", "items": [
{ "id": “44”, “quantity": 2
} ] }
payload: { orderId: “42” }
![Page 28: WHEN MICROSERVICES MEET EVENT SOURCING€¦ · WHEN MICROSERVICES MEET EVENT SOURCING Vinicius Gomes 57. Title: tw-tech-talks-2017-05-11 copy.key Created Date: 6/21/2017 7:00:47 PM](https://reader036.fdocuments.in/reader036/viewer/2022081611/5f0bad117e708231d431abb0/html5/thumbnails/28.jpg)
AGGREGATES
Example
28
{ "id": “42”, "status": "PLACED", "items": [
{ "id": “44”, “quantity": 2
} ] }
Order Aggregate
![Page 29: WHEN MICROSERVICES MEET EVENT SOURCING€¦ · WHEN MICROSERVICES MEET EVENT SOURCING Vinicius Gomes 57. Title: tw-tech-talks-2017-05-11 copy.key Created Date: 6/21/2017 7:00:47 PM](https://reader036.fdocuments.in/reader036/viewer/2022081611/5f0bad117e708231d431abb0/html5/thumbnails/29.jpg)
COMMANDS
29
Add item to order
{ "type": “com.restaurant.AddItemToOrderCommand”,
"payload": { "orderId": “be596c8e…”, "itemId": “5d09509c…”, "quantity": 1 }, "timestamp": “2017-03-25 08:48:51 -03:00”
}
![Page 30: WHEN MICROSERVICES MEET EVENT SOURCING€¦ · WHEN MICROSERVICES MEET EVENT SOURCING Vinicius Gomes 57. Title: tw-tech-talks-2017-05-11 copy.key Created Date: 6/21/2017 7:00:47 PM](https://reader036.fdocuments.in/reader036/viewer/2022081611/5f0bad117e708231d431abb0/html5/thumbnails/30.jpg)
COMMANDS
30
(state, command) -> [event]
Handling a command
![Page 31: WHEN MICROSERVICES MEET EVENT SOURCING€¦ · WHEN MICROSERVICES MEET EVENT SOURCING Vinicius Gomes 57. Title: tw-tech-talks-2017-05-11 copy.key Created Date: 6/21/2017 7:00:47 PM](https://reader036.fdocuments.in/reader036/viewer/2022081611/5f0bad117e708231d431abb0/html5/thumbnails/31.jpg)
COMMANDS
31
How do clients send commands?
📱
I want to add an item to my order!
?
![Page 32: WHEN MICROSERVICES MEET EVENT SOURCING€¦ · WHEN MICROSERVICES MEET EVENT SOURCING Vinicius Gomes 57. Title: tw-tech-talks-2017-05-11 copy.key Created Date: 6/21/2017 7:00:47 PM](https://reader036.fdocuments.in/reader036/viewer/2022081611/5f0bad117e708231d431abb0/html5/thumbnails/32.jpg)
COMMANDS
32
Reviewing REST
Resource Collection
host/api/orders
![Page 33: WHEN MICROSERVICES MEET EVENT SOURCING€¦ · WHEN MICROSERVICES MEET EVENT SOURCING Vinicius Gomes 57. Title: tw-tech-talks-2017-05-11 copy.key Created Date: 6/21/2017 7:00:47 PM](https://reader036.fdocuments.in/reader036/viewer/2022081611/5f0bad117e708231d431abb0/html5/thumbnails/33.jpg)
COMMANDS
33
Reviewing REST
Resource
host/api/orders/8659a0d6
![Page 34: WHEN MICROSERVICES MEET EVENT SOURCING€¦ · WHEN MICROSERVICES MEET EVENT SOURCING Vinicius Gomes 57. Title: tw-tech-talks-2017-05-11 copy.key Created Date: 6/21/2017 7:00:47 PM](https://reader036.fdocuments.in/reader036/viewer/2022081611/5f0bad117e708231d431abb0/html5/thumbnails/34.jpg)
COMMANDS
34
Reviewing REST
Nested Resource
host/api/orders/8659a0d6/items/5d1a8457
![Page 35: WHEN MICROSERVICES MEET EVENT SOURCING€¦ · WHEN MICROSERVICES MEET EVENT SOURCING Vinicius Gomes 57. Title: tw-tech-talks-2017-05-11 copy.key Created Date: 6/21/2017 7:00:47 PM](https://reader036.fdocuments.in/reader036/viewer/2022081611/5f0bad117e708231d431abb0/html5/thumbnails/35.jpg)
COMMANDS
35
Reviewing REST
HTTP MethodsGET POST PUT/PATCH DELETE
![Page 36: WHEN MICROSERVICES MEET EVENT SOURCING€¦ · WHEN MICROSERVICES MEET EVENT SOURCING Vinicius Gomes 57. Title: tw-tech-talks-2017-05-11 copy.key Created Date: 6/21/2017 7:00:47 PM](https://reader036.fdocuments.in/reader036/viewer/2022081611/5f0bad117e708231d431abb0/html5/thumbnails/36.jpg)
COMMANDS
36
Reviewing REST
Hypermedia Formats
![Page 37: WHEN MICROSERVICES MEET EVENT SOURCING€¦ · WHEN MICROSERVICES MEET EVENT SOURCING Vinicius Gomes 57. Title: tw-tech-talks-2017-05-11 copy.key Created Date: 6/21/2017 7:00:47 PM](https://reader036.fdocuments.in/reader036/viewer/2022081611/5f0bad117e708231d431abb0/html5/thumbnails/37.jpg)
COMMANDS
37
Commands can be resources
![Page 38: WHEN MICROSERVICES MEET EVENT SOURCING€¦ · WHEN MICROSERVICES MEET EVENT SOURCING Vinicius Gomes 57. Title: tw-tech-talks-2017-05-11 copy.key Created Date: 6/21/2017 7:00:47 PM](https://reader036.fdocuments.in/reader036/viewer/2022081611/5f0bad117e708231d431abb0/html5/thumbnails/38.jpg)
COMMANDS
Option #1
Generic “Commands” nested-resource
38
POST /orders/8659a0d6/commands
{ “type": “AddItemToOrderCommand”, "menuItem": “/menu/items/8d30d99“, “quantity": 2 }
![Page 39: WHEN MICROSERVICES MEET EVENT SOURCING€¦ · WHEN MICROSERVICES MEET EVENT SOURCING Vinicius Gomes 57. Title: tw-tech-talks-2017-05-11 copy.key Created Date: 6/21/2017 7:00:47 PM](https://reader036.fdocuments.in/reader036/viewer/2022081611/5f0bad117e708231d431abb0/html5/thumbnails/39.jpg)
COMMANDS
Option #2
Command URI
39
POST /orders/8659a0d6/items/commands/add
{ "menuItem": “/menu/items/8d30d99“, “quantity": 2 }
![Page 40: WHEN MICROSERVICES MEET EVENT SOURCING€¦ · WHEN MICROSERVICES MEET EVENT SOURCING Vinicius Gomes 57. Title: tw-tech-talks-2017-05-11 copy.key Created Date: 6/21/2017 7:00:47 PM](https://reader036.fdocuments.in/reader036/viewer/2022081611/5f0bad117e708231d431abb0/html5/thumbnails/40.jpg)
COMMANDS
Command discoverability
40
![Page 41: WHEN MICROSERVICES MEET EVENT SOURCING€¦ · WHEN MICROSERVICES MEET EVENT SOURCING Vinicius Gomes 57. Title: tw-tech-talks-2017-05-11 copy.key Created Date: 6/21/2017 7:00:47 PM](https://reader036.fdocuments.in/reader036/viewer/2022081611/5f0bad117e708231d431abb0/html5/thumbnails/41.jpg)
EVENT SOURCING
41
![Page 42: WHEN MICROSERVICES MEET EVENT SOURCING€¦ · WHEN MICROSERVICES MEET EVENT SOURCING Vinicius Gomes 57. Title: tw-tech-talks-2017-05-11 copy.key Created Date: 6/21/2017 7:00:47 PM](https://reader036.fdocuments.in/reader036/viewer/2022081611/5f0bad117e708231d431abb0/html5/thumbnails/42.jpg)
42
Queries?
![Page 43: WHEN MICROSERVICES MEET EVENT SOURCING€¦ · WHEN MICROSERVICES MEET EVENT SOURCING Vinicius Gomes 57. Title: tw-tech-talks-2017-05-11 copy.key Created Date: 6/21/2017 7:00:47 PM](https://reader036.fdocuments.in/reader036/viewer/2022081611/5f0bad117e708231d431abb0/html5/thumbnails/43.jpg)
QUERIES
Bad news 😔
The Event Store is not good for queries
43
Most applications
•A few writes
•A lot of reads
![Page 44: WHEN MICROSERVICES MEET EVENT SOURCING€¦ · WHEN MICROSERVICES MEET EVENT SOURCING Vinicius Gomes 57. Title: tw-tech-talks-2017-05-11 copy.key Created Date: 6/21/2017 7:00:47 PM](https://reader036.fdocuments.in/reader036/viewer/2022081611/5f0bad117e708231d431abb0/html5/thumbnails/44.jpg)
CQRS
44
![Page 45: WHEN MICROSERVICES MEET EVENT SOURCING€¦ · WHEN MICROSERVICES MEET EVENT SOURCING Vinicius Gomes 57. Title: tw-tech-talks-2017-05-11 copy.key Created Date: 6/21/2017 7:00:47 PM](https://reader036.fdocuments.in/reader036/viewer/2022081611/5f0bad117e708231d431abb0/html5/thumbnails/45.jpg)
CQRS
Command Query Responsibility Segregation
45
Write ✍
Read 📖
![Page 46: WHEN MICROSERVICES MEET EVENT SOURCING€¦ · WHEN MICROSERVICES MEET EVENT SOURCING Vinicius Gomes 57. Title: tw-tech-talks-2017-05-11 copy.key Created Date: 6/21/2017 7:00:47 PM](https://reader036.fdocuments.in/reader036/viewer/2022081611/5f0bad117e708231d431abb0/html5/thumbnails/46.jpg)
Service
CQRS
46
📱
Command
Query
Publish
Listen
![Page 47: WHEN MICROSERVICES MEET EVENT SOURCING€¦ · WHEN MICROSERVICES MEET EVENT SOURCING Vinicius Gomes 57. Title: tw-tech-talks-2017-05-11 copy.key Created Date: 6/21/2017 7:00:47 PM](https://reader036.fdocuments.in/reader036/viewer/2022081611/5f0bad117e708231d431abb0/html5/thumbnails/47.jpg)
Service A
CQRS
47
Service B
![Page 48: WHEN MICROSERVICES MEET EVENT SOURCING€¦ · WHEN MICROSERVICES MEET EVENT SOURCING Vinicius Gomes 57. Title: tw-tech-talks-2017-05-11 copy.key Created Date: 6/21/2017 7:00:47 PM](https://reader036.fdocuments.in/reader036/viewer/2022081611/5f0bad117e708231d431abb0/html5/thumbnails/48.jpg)
CQRS
48
Command model •Command definitions
•Event definitions
•The aggregate
•Aggregate repository
•Write only API
Query model •Event listeners
•Query entities
•Repositories
•Read only API
![Page 49: WHEN MICROSERVICES MEET EVENT SOURCING€¦ · WHEN MICROSERVICES MEET EVENT SOURCING Vinicius Gomes 57. Title: tw-tech-talks-2017-05-11 copy.key Created Date: 6/21/2017 7:00:47 PM](https://reader036.fdocuments.in/reader036/viewer/2022081611/5f0bad117e708231d431abb0/html5/thumbnails/49.jpg)
DEMO
49
![Page 50: WHEN MICROSERVICES MEET EVENT SOURCING€¦ · WHEN MICROSERVICES MEET EVENT SOURCING Vinicius Gomes 57. Title: tw-tech-talks-2017-05-11 copy.key Created Date: 6/21/2017 7:00:47 PM](https://reader036.fdocuments.in/reader036/viewer/2022081611/5f0bad117e708231d431abb0/html5/thumbnails/50.jpg)
DEMO
Online Restaurant
50
Service
![Page 51: WHEN MICROSERVICES MEET EVENT SOURCING€¦ · WHEN MICROSERVICES MEET EVENT SOURCING Vinicius Gomes 57. Title: tw-tech-talks-2017-05-11 copy.key Created Date: 6/21/2017 7:00:47 PM](https://reader036.fdocuments.in/reader036/viewer/2022081611/5f0bad117e708231d431abb0/html5/thumbnails/51.jpg)
DEMO
Online Restaurant
51
![Page 52: WHEN MICROSERVICES MEET EVENT SOURCING€¦ · WHEN MICROSERVICES MEET EVENT SOURCING Vinicius Gomes 57. Title: tw-tech-talks-2017-05-11 copy.key Created Date: 6/21/2017 7:00:47 PM](https://reader036.fdocuments.in/reader036/viewer/2022081611/5f0bad117e708231d431abb0/html5/thumbnails/52.jpg)
EXAMPLE: ONLINE RESTAURANT
52
Online Restaurant
Publishes Listen to
![Page 53: WHEN MICROSERVICES MEET EVENT SOURCING€¦ · WHEN MICROSERVICES MEET EVENT SOURCING Vinicius Gomes 57. Title: tw-tech-talks-2017-05-11 copy.key Created Date: 6/21/2017 7:00:47 PM](https://reader036.fdocuments.in/reader036/viewer/2022081611/5f0bad117e708231d431abb0/html5/thumbnails/53.jpg)
EXAMPLE: ONLINE RESTAURANT
53
Online Restaurant
Publishes Listen to
Publishes Listen to
![Page 54: WHEN MICROSERVICES MEET EVENT SOURCING€¦ · WHEN MICROSERVICES MEET EVENT SOURCING Vinicius Gomes 57. Title: tw-tech-talks-2017-05-11 copy.key Created Date: 6/21/2017 7:00:47 PM](https://reader036.fdocuments.in/reader036/viewer/2022081611/5f0bad117e708231d431abb0/html5/thumbnails/54.jpg)
TECHNOLOGIES
Java
Spring Boot
Axon Framework
Spring Data REST
RabbitMQ
54
https://github.com/vvgomes/event-driven-restaurant
![Page 55: WHEN MICROSERVICES MEET EVENT SOURCING€¦ · WHEN MICROSERVICES MEET EVENT SOURCING Vinicius Gomes 57. Title: tw-tech-talks-2017-05-11 copy.key Created Date: 6/21/2017 7:00:47 PM](https://reader036.fdocuments.in/reader036/viewer/2022081611/5f0bad117e708231d431abb0/html5/thumbnails/55.jpg)
SUMMARY
55
![Page 56: WHEN MICROSERVICES MEET EVENT SOURCING€¦ · WHEN MICROSERVICES MEET EVENT SOURCING Vinicius Gomes 57. Title: tw-tech-talks-2017-05-11 copy.key Created Date: 6/21/2017 7:00:47 PM](https://reader036.fdocuments.in/reader036/viewer/2022081611/5f0bad117e708231d431abb0/html5/thumbnails/56.jpg)
MICROSERVICES + EVENT SOURCING
Benefits •History based queries
•Audit log by design
• Immutability
•User intent
•Decoupling
•Resilience
56
Challenges •Complexity
•Snapshots
•Upcasting
•Race conditions
•Event contracts
•Eventual consistency
![Page 57: WHEN MICROSERVICES MEET EVENT SOURCING€¦ · WHEN MICROSERVICES MEET EVENT SOURCING Vinicius Gomes 57. Title: tw-tech-talks-2017-05-11 copy.key Created Date: 6/21/2017 7:00:47 PM](https://reader036.fdocuments.in/reader036/viewer/2022081611/5f0bad117e708231d431abb0/html5/thumbnails/57.jpg)
WHEN MICROSERVICES MEET EVENT SOURCINGVinicius Gomes
57