Slide 1

Slide 1 text

All aboard the Service Bus! All aboard the Service Bus! Robert Basic Robert Basic @robertbasic @robertbasic https:/ /robertbasic.com/ https:/ /robertbasic.com/ 1

Slide 2

Slide 2 text

PHP PHP Mockery Mockery Go Go Writing Writing Board games Board games D&D D&D 2

Slide 3

Slide 3 text

Photo by Mike Erskine An introduction An introduction CQS & CQRS CQS & CQRS Service buses Service buses Command buses Command buses Event buses Event buses Query buses Query buses Recap Recap 3

Slide 4

Slide 4 text

Been there. Been there. Done that. Done that. 4

Slide 5

Slide 5 text

CQS CQS CQRS CQRS Command-query separation Command Query Responsibility Segregation 5

Slide 6

Slide 6 text

6

Slide 7

Slide 7 text

Before CQRS Before CQRS 7

Slide 8

Slide 8 text

After CQRS I After CQRS I 8

Slide 9

Slide 9 text

After CQRS II After CQRS II 9

Slide 10

Slide 10 text

Smaller classes Smaller classes Separated responsibilities Separated responsibilities Faster writes and reads Faster writes and reads Easier database queries Easier database queries Photo by Aziz Acharki 10

Slide 11

Slide 11 text

More classes More classes Translation Translation Complex syncing Complex syncing Eventual consistency Eventual consistency Photo by Daniel Páscoa 11

Slide 12

Slide 12 text

Service Bus Service Bus Photo by Nick Baker 12

Slide 13

Slide 13 text

13

Slide 14

Slide 14 text

Message type support Message type support Tactician Tactician SimpleBus SimpleBus Prooph Service Bus Prooph Service Bus Photo by Rob Allen 14

Slide 15

Slide 15 text

15

Slide 16

Slide 16 text

Commands Commands Messages about user intention Messages about user intention CreateProduct, PutProductOnSale CreateProduct, PutProductOnSale Name reveals use case Name reveals use case One command, one action One command, one action 16

Slide 17

Slide 17 text

A command is always valid A command is always valid 17

Slide 18

Slide 18 text

Dispatching commands, HTTP Dispatching commands, HTTP 18

Slide 19

Slide 19 text

Dispatching commands,CLI Dispatching commands,CLI 19

Slide 20

Slide 20 text

Command handlers Command handlers 20

Slide 21

Slide 21 text

21

Slide 22

Slide 22 text

Events Events Messages about past events Messages about past events After a command was handled After a command was handled ProductCreated, ProductPriceUpdated ProductCreated, ProductPriceUpdated Once dispatched, can’t be stopped Once dispatched, can’t be stopped 22

Slide 23

Slide 23 text

An event holds primitives An event holds primitives 23

Slide 24

Slide 24 text

Dispatching events Dispatching events 24

Slide 25

Slide 25 text

Event listeners Event listeners 25

Slide 26

Slide 26 text

26

Slide 27

Slide 27 text

Queries Queries Not the same as database queries Not the same as database queries A query is a question A query is a question LatestProductsCreated, ProductsOnSale LatestProductsCreated, ProductsOnSale Answers from read models Answers from read models 27

Slide 28

Slide 28 text

A query is always valid A query is always valid 28

Slide 29

Slide 29 text

Dispatching queries Dispatching queries 29

Slide 30

Slide 30 text

Query handlers Query handlers 30

Slide 31

Slide 31 text

Take away Take away Photo by Ian Usher 31

Slide 32

Slide 32 text

ChimeraPHP ChimeraPHP https:/ /github.com/chimeraphp https:/ /github.com/chimeraphp https://gist.github.com/lcobucci/6c89a97ea9c11a6cccfc887afa15df81 32

Slide 33

Slide 33 text

Thank you! Thank you! Robert Basic Robert Basic @robertbasic @robertbasic https:/ /robertbasic.com/ https:/ /robertbasic.com/ https:/ /joind.in/talk/5a9d7 https:/ /joind.in/talk/5a9d7 33