SlideShare une entreprise Scribd logo
1  sur  90
Télécharger pour lire hors ligne
ASYNC MESSAGING in CQRS
PART 1: MASSTRANSIT
DDD GREECE
CARGO TRACKER
CARGO TRACKER
ABOUT
▸ Eric Evans “Big Blue Book”
▸ Published 2003
▸ Imaginary Shipping Company
▸ Chapter 7
CARGO TRACKER
KEY FUNCTIONALITY 1/2
▸ Book a Cargo
▸ Delivery Spec (Origin, Destination + Arrival DeadLine)
▸ (Re-)Assign an Itinerary
▸ matches Delivery Spec
▸ derives from Legs of 1+ Vessel Voyages
CARGO TRACKER
KEY FUNCTIONALITY 2/2
▸ Register a Handling Event
▸ Load, Unload etc
▸ Report the:
▸ Transport Status (In Port, On Board Vessel …)
▸ Routing Status (Not Routed, Routed, …)
▸ Next Expected Handling Event
▸ Delivery History
CARGO TRACKER
DOMAIN MODEL - CARGO AGGREGATE
▸ Cargo (Root)
▸ HandlingEvent
▸ Methods:
▸ New(DeliverySpec)
▸ AssignItinerary(Itinerary)
▸ ChangeDelivery(DeliverySpec)
▸ RegisterHandlingEvent(HandlingEvent)
CARGO TRACKER
DOMAIN MODEL - CARGO AGGREGATE
▸ State:
▸ TransportStatus
▸ RoutingStatus
▸ NextExpected: HandlingEvent
▸ DeliveryHistory
▸ Collection of HandlingEvents
CARGO TRACKER
REFACTORING - HANDLING EVENT
CARGO TRACKER
REFACTORING - HANDLING EVENT
CARGO TRACKER
REFACTORING - DELIVERY HISTORY
▸ “leaves Delivery History with no persistent state”
▸ “no real need to keep it around”
▸ “we could derive Delivery History itself whenever it is
needed to answer some question”
CARGO TRACKER
REFACTORING - HANDLING EVENT AGGREGATE
▸ HandlingEvent Aggregate:
▸ no domain logic (anemic)
▸ only repository + event class
▸ repository servicing query needs of other aggregates
CQRS RECAP
CQRS RECAP
ABOUT
▸ Command-Query Responsibility Segregation
▸ keep separate read (query) and write (command) models
▸ DeliveryHistory: Read/Query
▸ Cargo: Write/Command
▸ practically SRP
CQRS RECAP
COMMANDS
▸ BookNewCargo, AssignItinerary etc.
▸ App Layer
▸ CommandHandler
▸ BookNewCargoHandler, AssignItineraryHandler etc.
▸ practically an App Service
▸ SRP
CQRS RECAP
EVENTS 1/2
▸ NewCargoBooked, DeliveryChanged etc.
▸ Domain Layer
▸ Emitted by A/R after Command Applying
▸ Dispatched by Command Handler
CQRS RECAP
EVENTS 2/2
▸ EventHandler
▸ e.g. NewCargoBookedHandler, DeliveryChangedHandler
▸ App Layer
▸ Typical Handlers:
▸ Aggregate / Bounded Context Integration
▸ wired to another Command Handler
▸ Read Model Update
CQRS RECAP
READ MODEL UPDATE 1/3
*
* * * * *
*
* *
* * *
* *
* *
* *
* * *
* * * * *
* * * * * *
CQRS RECAP
READ MODEL UPDATE 2/3
1 M
1
M
1
M
1M
CQRS RECAP
READ MODEL UPDATE 3/3
*
* * * * *
*
* *
* * *
* *
* *
* *
* * *
* * * * *
* * * * * *
CQRS RECAP
MULTIPLE EVENT HANDLERS
*
* * * * *
*
* *
* * *
* *
* *
* *
* * *
* * * * *
* * * * * *
* *
* *
* * *
* * *
* *
*
CQRS RECAP
MISCONCEPTIONS 1/2
▸ needs two datastores/databases
▸ must be NoSQL
▸ requires async processing
▸ needs async messaging/queueing framework
▸ consistency only eventual
CQRS RECAP
MISCONCEPTIONS 1/2
▸ needs two datastores/databases
▸ must be NoSQL
▸ requires async processing
▸ needs async messaging/queueing framework
▸ consistency only eventual
TRADE OFFS
CQRS RECAP
MISCONCEPTIONS 2/2
▸ needs a CQRS framework
▸ works only with event sourcing
▸ applied end-to-end
▸ e.g. CRUD
CQRS RECAP
SYNC PROCESSING
▸ single process (e.g. Web App)
▸ decreases availability
▸ if process is UI affects UX
▸ in-process event dispatcher for decoupling
▸ rely on base framework facilities
▸ immediate consistency
CQRS RECAP
ASYNC PROCESSING
▸ multiple processes (e.g. WebApp and WorkerApp)
▸ higher availability, scaling out
▸ consistency eventual
▸ typically implemented with async messaging
▸ message bus
▸ in-process event dispatcher allows for applying selectively
CQRS RECAP
TYPICAL SYSTEM with CQRS + ASYNC PROCESSING
/ *
-BBB
3
B BB #
/ A A *
3 BB # 3 A
A BC A B A C A C B BC C
B 2 3
AB BCB BC C CB
B B A B B CB
C
B BB #
B 3B C 2 3 A B C A 3 3
. 3 - 3
C
2 B BC C#
/ A A * (
3 A A
A 2 BB C
3 AB#
C A 2 BB# C
B B2A A#
/ A A * )
2 ACB CB
C A 3 3
2CB 3 AB BCB
/A C 3
ASYNC
MESSAGING
ASYNC MESSAGING
MESSAGE BUS 1/2
▸ frameworks: NServiceBus, MassTransit, Rebus etc.
▸ transports: RabbitMQ, Azure Service Bus etc.
▸ at least-once delivery
▸ FIFO
▸ reliable messaging
▸ automatic transport configuration setup
▸ pub/sub, send/receive
ASYNC MESSAGING
MESSAGE BUS 1/2
▸ frameworks: NServiceBus, MassTransit, Rebus etc.
▸ transports: RabbitMQ, Azure Service Bus etc.
▸ at least-once delivery
▸ FIFO
▸ reliable messaging
▸ automatic transport configuration setup
▸ pub/sub, send/receive
ASYNC MESSAGING
ASYNC & RELIABLE MESSAGING
ALL=CA .KI AK
N ELDAK A AK AM
N L KE AK ( A AE AK
AM
N L KE AK )
1P D= CA -
NANA ( NANA )
1P D= CA . R
)
-/3IK1KKIK
(
A
-/3IK
=
LC A E AKQ EL 142-.41 ( # , 2B
LC EL IM - A Q MDA .KI AK =
1KKIK EL K=ELA E MDA A AK
LC A E AKQ EL 142-.41 ) # , 2B LC EL IM - A IK
= A Q MDA A AE AK MDA LC LM=QL E MDA NANA
LC A E AKQ A MI
A # EL - / ,
A AK EL I A =BMAK
CAMME C MDA -
LC A E AKQ EL
142-.41 # ,
NANAL = A
AKLELMA M = KILL
KI AK KALM=KML
- = EM # 1 - 41
AAEA
ASYNC MESSAGING
MESSAGE BUS 2/2
▸ connection management
▸ persistent sagas/process managers
▸ retrying policy on subscriber/receiver errors
▸ alarm service
▸ (de)serialization
ASYNC MESSAGING
CQRS & MESSAGING PATTERNS
Command Handler Receiver
Command Issuer Sender
Event Handler Subscriber
Event Emitter Publisher
ASYNC MESSAGING
COMMAND FLOW
1. Process A
A. Issue
B. Send
2. Process B
C. Receive
D. Handle - Create Events
ASYNC MESSAGING
EVENT FLOW
1. Process B
A. Emit
B. Publish
2. Process C
C. Subscribe
D. Handle
IMPLEMENTATION
IMPLEMENTATION
WARNING
ASYNC MESSAGING 

!= 

ASYNC/AWAIT
STEP 1:
COMMAND ISSUING/SENDING
IMPLEMENTATION
COMMAND ISSUING - (WEB)APP LAYER
▸ IssueAsync implemented with Bus.Send<T>
IMPLEMENTATION
COMMAND SENDING / BOOTSTRAPPING MASSTRANSIT
▸ bus is a Single Instance / AppDomain
IMPLEMENTATION
MASSTRANSIT / BUS.SEND<T>
▸ Send(er)/Receive(r) Pattern
IMPLEMENTATION
MASSTRANSIT / BUS.SEND<T>
▸ Send(er)/Receive(r) Pattern
IMPLEMENTATION
COMMAND INTEGRITY 1/2
IMPLEMENTATION
COMMAND INTEGRITY 1/2
IMPLEMENTATION
COMMAND INTEGRITY 2/2
IMPLEMENTATION
COMMAND INTEGRITY 2/2
IMPLEMENTATION
COMMAND ISSUING/SENDING SUMMARY
▸ Use Domain Structures in Command
▸ Command Integrity
▸ ICommandIssuer abstraction
▸ MassTransit implementation
▸ Converts Commands to Messages (TbC)
▸ Encapsulate in an App Service
▸ Validation
STEP 2:
COMMAND RECEIVING/
HANDLING
IMPLEMENTATION
COMMAND RECEIVING / BOOTSTRAPPING MASSTRANSIT
IMPLEMENTATION
COMMAND RECEIVING / BOOTSTRAPPING MASSTRANSIT
IMPLEMENTATION
COMMAND RECEIVING / BOOTSTRAPPING MASSTRANSIT
IMPLEMENTATION
COMMAND RECEIVING / BOOTSTRAPPING MASSTRANSIT
IMPLEMENTATION
COMMAND RECEIVING / BOOTSTRAPPING MASSTRANSIT
IMPLEMENTATION
MASSTRANSIT / CONSUMER<T>
IMPLEMENTATION
MASSTRANSIT / CONSUMER<T>
IMPLEMENTATION
MASSTRANSIT RETRING FLOW (SIMPLIFIED)
1. message deserialised
2. identity consumer from message type
A. if consumer identified
‣ run handler in try/catch
‣ on exception check retry policy
‣ either retry on ignore
B. if consumer is NOT identified (TbC)
IMPLEMENTATION
COMMAND HANDLING / EVENT DISPATCHING - APP LAYER
IMPLEMENTATION
COMMAND HANDLING / EVENT DISPATCHING - APP LAYER
IMPLEMENTATION
AGGREGATE EVENTS
▸ A/Rs should inherit from BaseAggregateRoot
▸ exposes Events collection
IMPLEMENTATION
AGGREGATE EVENTS
▸ A/Rs should inherit from BaseAggregateRoot
▸ exposes Events collection
IMPLEMENTATION
AGGREGATE EVENTS
▸ A/Rs should inherit from BaseAggregateRoot
▸ exposes Events collection
IMPLEMENTATION
EVENT DISPATCHER 1/2
▸ wires SYNChronously (in-process) command with event handlers
▸ is the “Emitter”
▸ wired handlers can be
▸ an actual one (e.g. read model update)
▸ forwarder (event->message + publish) to the bus
▸ both
▸ even for the same event
▸ infra free implementation
IMPLEMENTATION
EVENT DISPATCHER 2/2
*
* * * * *
*
* *
* * *
* *
* *
* *
* * *
* * * * *
* * * * * *
* *
* *
* * *
* * *
* *
*
IN-PROCESS
FORWARD
FORWARD
STEP 3:
EVENT EMITTING/PUBLISHING
IMPLEMENTATION
EVENT EMITTING/PUBLISHING
▸ as with Commands, Events should use domain structures
▸ IEventEmitter abstraction similar to ICommandIssuer
▸ MassTransit implementation with Bus.Publish<T>
▸ Converts Events to Messages (TbC)
IMPLEMENTATION
MASSTRANSIT / BUS.PUBLISH<T>
▸ EndPoint agnostic
▸ Publisher(er)/Subscribe(r) Pattern
STEP 4:
EVENT SUBSCRIBING/
HANDLING
IMPLEMENTATION
EVENT SUBSCRIBING / BOOTSTRAPPING MASSTRANSIT
▸ bootstrapping identical to command receiving
▸ need a Consumer<T>
▸ translates the message to event
▸ instantiates and invokes event handler
IMPLEMENTATION
MASSTRANSIT / CONSUMER<T> (AGAIN)
IMPLEMENTATION
MASSTRANSIT / CONSUMER<T> (AGAIN)
IMPLEMENTATION
EVENT HANDLING
IMPLEMENTATION
EVENT HANDLING
IMPLEMENTATION
EVENT HANDLING
BEST PRACTICES
BEST PRACTICES
MESSAGE DESIGN
▸ messages are POCOS. (period)
▸ do NOT reuse domain structures
▸ SERIOUS danger of message loss
▸ type repetition and mapping are unavoidable
▸ Automapper FTW !
▸ messages might change (aka message versioning)
▸ subscribe to interfaces
▸ ensure correct version or serialiser assembly deployed
▸ JSON .NET
BEST PRACTICES
SYSTEM ARCHITECTURE
▸ apply selectively not globally
▸ always forward (i.e. publish) the events
▸ bounded context interface
▸ rely on the retrying facilities
▸ idempotency
▸ fence “expensive” services
▸ perhaps even with sync send/receive (e.g. Routing Service)
BEST PRACTICES
SCALING OPTIONS
▸ scale up: can invoke Message Handlers in parallel using a
ThreadPool = Round Robin
▸ bus.SetConcurrencyLimit
▸ scale out: “competing consumers”
▸ same EndPointID
▸ probable concurrency issues
▸ aggregate versioning !
BEST PRACTICES
HOUSE-KEEPING
▸ descriptive End Point IDs mostly for subscribers/receivers
▸ web_SERVER1_sender
▸ cmd_rec_worker
▸ evt_sub_booking_reporting
▸ evt_sub_shipping
▸ monitor transport
BEST PRACTICES
COMPETING CONSUMERS
1 1
1
1 #
1
#
INDICATIONS
INDICATIONS
▸ command/event handlers that are:
▸ resource intensive/blocking
▸ involve multiple aggregate instances
▸ e.g. reroute all cargos unloading @ Hong Kong
▸ error prone
▸ involve external service calls
▸ e.g. email multiple recipients
▸ multiple bounded contexts
INDICATIONS
▸ separate physical read datastores
▸ high load of commands/events
▸ non-human/UI command issuers
CHALLENGES
CHALLENGES
EVENTUAL CONSISTENCY
▸ heavily affects UI/UX
▸ contradicts user mentality
▸ need to notify on command handling error
▸ makes UI implementation more complex
CHALLENGES
IMPLEMENTATION-RELATED
▸ a LOT of type repetition
▸ more physical processes
▸ changes MIGHT need orchestration
▸ concurrency issues
▸ transport = additional infra
RESOURCES
RESOURCES
READINGS
▸ CQRS Journey by Microsoft Patterns & Practises 

cqrsjourney.github.io
▸ CQRS by Edument

cqrs.nu
▸ Clarified CQRS by Udi Dahan 

udidahan.com/2009/12/09/clarified-cqrs
▸ MassTransit Documentation 

docs.masstransit-project.com
RESOURCES
SAMPLES
▸ Cargo Tracker
▸ github.com/citerus/dddsample-core 

(Java) by Citerus AB
▸ github.com/SzymonPobiega/DDDSample.Net 

(.ΝΕΤ) by Szymon Pobiega
▸ CQRS, The example - Mark Nijhof

leanpub.com/cqrs

RESOURCES
SANDBOX SERVICES
▸ RabbitMQ: CloudAMQP 

www.cloudamqp.com
▸ MongoDB: Atlas 

www.mongodb.com/cloud
▸ PostgreSQL, SQL Server etc: AWS Free Tier

aws.amazon.com/free/ 

Q&A

Contenu connexe

Similaire à Async Messaging in CQRS: Part 1 - Masstransit

[CB16] 80時間でWebを一周:クロムミウムオートメーションによるスケーラブルなフィンガープリント by Isaac Dawson
[CB16] 80時間でWebを一周:クロムミウムオートメーションによるスケーラブルなフィンガープリント by Isaac Dawson[CB16] 80時間でWebを一周:クロムミウムオートメーションによるスケーラブルなフィンガープリント by Isaac Dawson
[CB16] 80時間でWebを一周:クロムミウムオートメーションによるスケーラブルなフィンガープリント by Isaac Dawson
CODE BLUE
 
10. th cncf meetup - Routing microservice-architectures-with-traefik-cncfsk
10. th cncf meetup - Routing microservice-architectures-with-traefik-cncfsk10. th cncf meetup - Routing microservice-architectures-with-traefik-cncfsk
10. th cncf meetup - Routing microservice-architectures-with-traefik-cncfsk
Juraj Hantak
 

Similaire à Async Messaging in CQRS: Part 1 - Masstransit (20)

Cloud Native Microservices with Spring Cloud
Cloud Native Microservices with Spring CloudCloud Native Microservices with Spring Cloud
Cloud Native Microservices with Spring Cloud
 
CQRS, ReactJS, Docker in a nutshell
CQRS, ReactJS, Docker in a nutshellCQRS, ReactJS, Docker in a nutshell
CQRS, ReactJS, Docker in a nutshell
 
CQRS, React, Docker in a Nutshell
CQRS, React, Docker in a NutshellCQRS, React, Docker in a Nutshell
CQRS, React, Docker in a Nutshell
 
Docker cqrs react
Docker cqrs reactDocker cqrs react
Docker cqrs react
 
[CB16] 80時間でWebを一周:クロムミウムオートメーションによるスケーラブルなフィンガープリント by Isaac Dawson
[CB16] 80時間でWebを一周:クロムミウムオートメーションによるスケーラブルなフィンガープリント by Isaac Dawson[CB16] 80時間でWebを一周:クロムミウムオートメーションによるスケーラブルなフィンガープリント by Isaac Dawson
[CB16] 80時間でWebを一周:クロムミウムオートメーションによるスケーラブルなフィンガープリント by Isaac Dawson
 
Cloud Native: Designing Change-tolerant Software
Cloud Native: Designing Change-tolerant SoftwareCloud Native: Designing Change-tolerant Software
Cloud Native: Designing Change-tolerant Software
 
Cloud Native Architectures for Devops
Cloud Native Architectures for DevopsCloud Native Architectures for Devops
Cloud Native Architectures for Devops
 
jtf2016-mom
jtf2016-momjtf2016-mom
jtf2016-mom
 
Andrii Dembitskyi "Events in our applications Event bus and distributed systems"
Andrii Dembitskyi "Events in our applications Event bus and distributed systems"Andrii Dembitskyi "Events in our applications Event bus and distributed systems"
Andrii Dembitskyi "Events in our applications Event bus and distributed systems"
 
Designing & architecting RabbitMQ engineered systems - Ayanda Dube @ London R...
Designing & architecting RabbitMQ engineered systems - Ayanda Dube @ London R...Designing & architecting RabbitMQ engineered systems - Ayanda Dube @ London R...
Designing & architecting RabbitMQ engineered systems - Ayanda Dube @ London R...
 
10. th cncf meetup - Routing microservice-architectures-with-traefik-cncfsk
10. th cncf meetup - Routing microservice-architectures-with-traefik-cncfsk10. th cncf meetup - Routing microservice-architectures-with-traefik-cncfsk
10. th cncf meetup - Routing microservice-architectures-with-traefik-cncfsk
 
osi-oss-dbs.pptx
osi-oss-dbs.pptxosi-oss-dbs.pptx
osi-oss-dbs.pptx
 
Canary deployment with Traefik and K3S
Canary deployment with Traefik and K3SCanary deployment with Traefik and K3S
Canary deployment with Traefik and K3S
 
Workshop Consul .- Service Discovery & Failure Detection
Workshop Consul .- Service Discovery & Failure DetectionWorkshop Consul .- Service Discovery & Failure Detection
Workshop Consul .- Service Discovery & Failure Detection
 
Advanced Task Scheduling with Amazon ECS (June 2017)
Advanced Task Scheduling with Amazon ECS (June 2017)Advanced Task Scheduling with Amazon ECS (June 2017)
Advanced Task Scheduling with Amazon ECS (June 2017)
 
Cassandra 2.1 boot camp, Overview
Cassandra 2.1 boot camp, OverviewCassandra 2.1 boot camp, Overview
Cassandra 2.1 boot camp, Overview
 
The Good Parts / The Hard Parts
The Good Parts / The Hard PartsThe Good Parts / The Hard Parts
The Good Parts / The Hard Parts
 
Traefik 2.x features - canary deployment with Traefik and K3S
Traefik 2.x features - canary deployment with Traefik and K3STraefik 2.x features - canary deployment with Traefik and K3S
Traefik 2.x features - canary deployment with Traefik and K3S
 
The state of the swarm
The state of the swarmThe state of the swarm
The state of the swarm
 
Traefik as an open source edge router for microservice architectures
Traefik as an open source edge router for microservice architecturesTraefik as an open source edge router for microservice architectures
Traefik as an open source edge router for microservice architectures
 

Dernier

%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
masabamasaba
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
masabamasaba
 
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
masabamasaba
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
masabamasaba
 
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Medical / Health Care (+971588192166) Mifepristone and Misoprostol tablets 200mg
 
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
chiefasafspells
 

Dernier (20)

Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
 
tonesoftg
tonesoftgtonesoftg
tonesoftg
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
 
%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
 
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
 
WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...
WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...
WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
 
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
 
WSO2CON 2024 - How to Run a Security Program
WSO2CON 2024 - How to Run a Security ProgramWSO2CON 2024 - How to Run a Security Program
WSO2CON 2024 - How to Run a Security Program
 
WSO2Con204 - Hard Rock Presentation - Keynote
WSO2Con204 - Hard Rock Presentation - KeynoteWSO2Con204 - Hard Rock Presentation - Keynote
WSO2Con204 - Hard Rock Presentation - Keynote
 
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
 
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK Software
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
 

Async Messaging in CQRS: Part 1 - Masstransit