SlideShare uma empresa Scribd logo
1 de 78
Baixar para ler offline
MESSAGING in CQRS with
MASSTRANSIT
DDD GREECE / Thessaloníki .NET Meetup
www.meetup.com/dddgreece/
DDD Greece Meetup
DDD @ Slack
https://ddd-cqrs-es.herokuapp.com
DDD Greece Channel
#dddgr
DDD
DDD
DOMAIN MODEL
▸ structured knowledge about the domain
▸ knowledge crunching
▸ ubiquitous language
▸ typically an OO model
▸ no UI or persistence concerns
▸ != data model
DDD
BUILDING BLOCKS 1/2
▸ Entities
▸ id
▸ mutable
▸ Value Objects
▸ no id
▸ immutable
▸ diff state = diff value object
DDD
BUILDING BLOCKS 2/2
▸ Domain Services
▸ stateless
▸ Domain Events
▸ immutable
▸ timestamped
▸ ref to entities
DDD
AGGREGATE
▸ object graph of Entities and Value objects
▸ root = single entity
▸ global identity
▸ external entities refer ONLY to the aggregate root
▸ root enforces invariants via root entity’s interface
▸ consistency boundary
CARGO TRACKER
CARGO TRACKER
ABOUT
▸ Eric Evans “Big Blue Book”
▸ Published 2003
▸ Imaginary Shipping Company
CARGO TRACKER
KEY FUNCTIONALITY 1/2
▸ Book a Cargo based on Spec
▸ Get a Tracking Identifier
▸ (Re-)Assign an Itinerary
▸ Register a Handling Event (Load, Unload, Customs …)
CARGO TRACKER
KEY FUNCTIONALITY 2/2
▸ Get Transport Status (In Port, On Board Vessel …)
▸ Get Routing Status (Not Routed, Routed, …)
▸ Calculate Next Expected Handling Activity
▸ Get Delivery History
CARGO TRACKER
INVARIANT
▸ Transport Status >= On Board Vessel



AND
▸ Routing Status >= Routed
CARGO TRACKER
DOMAIN MODEL - CARGO AGGREGATE 1/2
▸ Cargo Entity as Root
▸ HandlingEvent
▸ Root’s Methods:
▸ New(TrackingId, DeliverySpec)
▸ AssignItinerary(Itinerary)
▸ RegisterHandlingEvent(HandlingEvent)
WRITE /
COMMANDS
CARGO TRACKER
DOMAIN MODEL - CARGO AGGREGATE 2/2
▸ Root’s State:
▸ TransportStatus (Enum)
▸ RoutingStatus (Enum)
▸ NextExpected: HandlingActivity
▸ DeliveryHistory: 

IEnumerable<HandlingEvent>
READ / QUERIES
CARGO TRACKER
PROBLEMS 1/2
▸ Delivery History
▸ 1:M with Handling Events
▸ “Cargo Aggregate involved in the transaction”
▸ “ability to enter Handling Events without contention”
CARGO TRACKER
PROBLEMS 2/2
CARGO TRACKER
REFACTORING DELIVERY HISTORY
▸ separate HandlingEvent Aggregate:
▸ no domain logic (anemic)
▸ only repository + event class
CQRS
CQRS
ABOUT
▸ Command-Query Responsibility Segregation
▸ keep separate read (query) and write (command) models
▸ DeliveryHistory: Read/Query
▸ Cargo: Write/Command
▸ typical constructs
▸ Commands
▸ Events
CQRS
COMMANDS
▸ Capture Intent
▸ BookNewCargo, AssignItinerary etc.
▸ App Layer
▸ Command Handlers
▸ BookNewCargoHandler, AssignItineraryHandler etc.
▸ practically an App Service
CQRS
CQRS
EVENTS 1/2
▸ Convey State Transition
▸ NewCargoBooked, DeliveryChanged etc.
▸ != Domain Events (e.g Handling Event)
▸ Domain Layer
▸ Emitted by Aggregate Root after applying a command
CQRS
EVENTS 2/2
▸ EventHandler
▸ e.g. NewCargoBookedHandler, DeliveryChangedHandler
▸ App Layer
▸ Typical Usage:
▸ Aggregate / Bounded Context (=SubSystem) Integration
▸ wired to another Command Handler
▸ Read Model Update
CQRS
READ MODEL UPDATE PATTERN
*
* * * * *
*
* *
* *
* *
* *
* * *
* * * * *
* * * * * *
* * *
CQRS
MULTIPLE EVENT HANDLERS
*
* * * * *
*
* *
* * *
* *
* *
* *
* * *
* * * * *
* * * * * *
* *
* *
* * *
* * *
* *
*
CQRS
MISCONCEPTIONS 1/2
▸ needs two datastores/databases
▸ must be NoSQL
▸ requires async processing
▸ needs messaging/queueing
▸ consistency always eventual
TRADE OFFS
CQRS
MISCONCEPTIONS 2/2
▸ needs a CQRS framework
▸ works only with event sourcing
▸ applied globally to a system
CQRS
SYNC PROCESSING
▸ single process (e.g. Web App)
▸ reduces availability
▸ affects UX
▸ in-process event dispatcher for decoupling
▸ immediate consistency
CQRS
ASYNC PROCESSING
▸ multiple processes (e.g. WebApp and WorkerApp)
▸ higher availability, scaling out
▸ consistency eventual
▸ also affects UX
▸ typically implemented with async messaging
▸ message bus
CQRS
CQRS ASYNC PROCESSING ARCHITECTURE 1/2
2 )BB
.EE3*E
A 3
3E EE3 #
2A )BB
A 3 EE3 # 3
E A E 3 3 AA E E 3
3BB E A 3
B E E E E 3
E E
3E EE3 #
- A 3 C E 3 A
3 .A
3 I
A E E #
2A )BB
A 3
B A EE
3 E#
A A B A EE#
3 #
2A )BB (
A E E
A 3 A
A E 3 B E E E
2 A
3 I
A E E #
CQRS
CQRS ASYNC PROCESSING ARCHITECTURE 2/2
(
C (
3 - 2 CAA B EI AC
C
B I K
CB B #
*CAA B B
C CC N
CAA B
A B
AC
AA K
CB B #
)I
B
A #
BC A
B C B
B #
CB B
B C AC
C B
C (
CI C C # B
B #
C (
M
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
ASYNC & RELIABLE MESSAGING
CB C
2 C A C E
C C 4 C
E
C C
A
3 3
A
,.BC
CCBC
A
)
,.BC1
32 4 E 3# 2
(4
(
)
-
) =A (
3 1A (= =
== = = 3 / 3 =
D ,() , = A (
/2 3D A A A2D = A B B
3 (
) )
= = /
/
/
ASYNC MESSAGING
MESSAGE BUS 2/2
▸ provides
▸ transport topology setup
▸ transport 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
COMMAND INTEGRITY 1/2
IMPLEMENTATION
COMMAND INTEGRITY 2/2
IMPLEMENTATION
COMMAND ISSUING/SENDING SUMMARY
▸ Should 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
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
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, in-process one (e.g. read model update)
▸ a 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
EVENT HANDLING
BEST PRACTICES
BEST PRACTICES
MESSAGE DESIGN
▸ messages are POCOS. (period)
▸ do NOT reuse domain structures
▸ 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
▸ UsePartitioner
▸ aggregate versioning !
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. payment service
▸ multiple bounded contexts
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
DDD
▸ Patterns, Principles and Practices of Domain-Driven Design by
Scott Millett, Nick Tune 

http://amzn.to/2hsNbLg
▸ Domain Driven Design by Eric Evans

http://amzn.to/2uhbOSc
▸ Effective Aggregate Design (3 Part Series) by Vaughn Vernon 

https://vaughnvernon.co/?p=838
▸ Awesome DDD by Nick Chamberlain

https://github.com/heynickc/awesome-ddd
RESOURCES
CQRS
▸ 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
RESOURCES
SAMPLES
▸ Cargo Tracker
▸ github.com/SzymonPobiega/DDDSample.Net 

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

leanpub.com/cqrs

Q&A

Mais conteúdo relacionado

Mais procurados

Mais procurados (20)

Advanced messaging with Apache ActiveMQ
Advanced messaging with Apache ActiveMQAdvanced messaging with Apache ActiveMQ
Advanced messaging with Apache ActiveMQ
 
Microservices Architecture - Bangkok 2018
Microservices Architecture - Bangkok 2018Microservices Architecture - Bangkok 2018
Microservices Architecture - Bangkok 2018
 
Kafka 101
Kafka 101Kafka 101
Kafka 101
 
[오픈소스컨설팅] EFK Stack 소개와 설치 방법
[오픈소스컨설팅] EFK Stack 소개와 설치 방법[오픈소스컨설팅] EFK Stack 소개와 설치 방법
[오픈소스컨설팅] EFK Stack 소개와 설치 방법
 
Microservice vs. Monolithic Architecture
Microservice vs. Monolithic ArchitectureMicroservice vs. Monolithic Architecture
Microservice vs. Monolithic Architecture
 
Netflix viewing data architecture evolution - EBJUG Nov 2014
Netflix viewing data architecture evolution - EBJUG Nov 2014Netflix viewing data architecture evolution - EBJUG Nov 2014
Netflix viewing data architecture evolution - EBJUG Nov 2014
 
CRDB - Multi-Master Geo Distributed Redis with Redis Enterprise
CRDB - Multi-Master Geo Distributed Redis with Redis EnterpriseCRDB - Multi-Master Geo Distributed Redis with Redis Enterprise
CRDB - Multi-Master Geo Distributed Redis with Redis Enterprise
 
엔터프라이즈를 위한 AWS 지원 및 사례 (서수영) - AWS 웨비나 시리즈
엔터프라이즈를 위한 AWS 지원 및 사례 (서수영) - AWS 웨비나 시리즈엔터프라이즈를 위한 AWS 지원 및 사례 (서수영) - AWS 웨비나 시리즈
엔터프라이즈를 위한 AWS 지원 및 사례 (서수영) - AWS 웨비나 시리즈
 
gRPC Design and Implementation
gRPC Design and ImplementationgRPC Design and Implementation
gRPC Design and Implementation
 
Microservices Docker Kubernetes Istio Kanban DevOps SRE
Microservices Docker Kubernetes Istio Kanban DevOps SREMicroservices Docker Kubernetes Istio Kanban DevOps SRE
Microservices Docker Kubernetes Istio Kanban DevOps SRE
 
Introduction to microservices
Introduction to microservicesIntroduction to microservices
Introduction to microservices
 
Introduction to Microservices
Introduction to MicroservicesIntroduction to Microservices
Introduction to Microservices
 
톰캣 운영 노하우
톰캣 운영 노하우톰캣 운영 노하우
톰캣 운영 노하우
 
Event Storming and Saga
Event Storming and SagaEvent Storming and Saga
Event Storming and Saga
 
Stability Patterns for Microservices
Stability Patterns for MicroservicesStability Patterns for Microservices
Stability Patterns for Microservices
 
(Draft) Kubernetes - A Comprehensive Overview
(Draft) Kubernetes - A Comprehensive Overview(Draft) Kubernetes - A Comprehensive Overview
(Draft) Kubernetes - A Comprehensive Overview
 
Paris Kafka Meetup - Concepts & Architecture
Paris Kafka Meetup - Concepts & ArchitectureParis Kafka Meetup - Concepts & Architecture
Paris Kafka Meetup - Concepts & Architecture
 
Microservices Testing Strategies JUnit Cucumber Mockito Pact
Microservices Testing Strategies JUnit Cucumber Mockito PactMicroservices Testing Strategies JUnit Cucumber Mockito Pact
Microservices Testing Strategies JUnit Cucumber Mockito Pact
 
CQRS and Event Sourcing, An Alternative Architecture for DDD
CQRS and Event Sourcing, An Alternative Architecture for DDDCQRS and Event Sourcing, An Alternative Architecture for DDD
CQRS and Event Sourcing, An Alternative Architecture for DDD
 
APACHE KAFKA / Kafka Connect / Kafka Streams
APACHE KAFKA / Kafka Connect / Kafka StreamsAPACHE KAFKA / Kafka Connect / Kafka Streams
APACHE KAFKA / Kafka Connect / Kafka Streams
 

Semelhante a Messaging in CQRS with MassTransit

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
 

Semelhante a Messaging in CQRS with MassTransit (20)

Async Messaging in CQRS: Part 1 - Masstransit
 Async Messaging in CQRS: Part 1 - Masstransit Async Messaging in CQRS: Part 1 - Masstransit
Async Messaging in CQRS: Part 1 - Masstransit
 
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
 
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
 
Java Microservices with Netflix OSS & Spring
Java Microservices with Netflix OSS & Spring Java Microservices with Netflix OSS & Spring
Java Microservices with Netflix OSS & Spring
 
Cloud Native Microservices with Spring Cloud
Cloud Native Microservices with Spring CloudCloud Native Microservices with Spring Cloud
Cloud Native Microservices with Spring Cloud
 
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...
 
Cloud Native Microservices with Spring Cloud
Cloud Native Microservices with Spring CloudCloud Native Microservices with Spring Cloud
Cloud Native Microservices with Spring Cloud
 
Canary deployment with Traefik and K3S
Canary deployment with Traefik and K3SCanary deployment with Traefik and K3S
Canary deployment with Traefik and K3S
 
Kubernetes training
Kubernetes trainingKubernetes training
Kubernetes training
 
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"
 
Migratory Workloads Across Clouds with Nomad
Migratory Workloads Across Clouds with NomadMigratory Workloads Across Clouds with Nomad
Migratory Workloads Across Clouds with Nomad
 
The Concierge Paradigm
The Concierge ParadigmThe Concierge Paradigm
The Concierge Paradigm
 
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
 
ecs-presentation
ecs-presentationecs-presentation
ecs-presentation
 
Migratory Workloads Across Clouds with Nomad
Migratory Workloads Across Clouds with NomadMigratory Workloads Across Clouds with Nomad
Migratory Workloads Across Clouds with Nomad
 
Scaling Microservices with Kubernetes
Scaling Microservices with KubernetesScaling Microservices with Kubernetes
Scaling Microservices with Kubernetes
 
Let's migrate to Swift 3.0
Let's migrate to Swift 3.0Let's migrate to Swift 3.0
Let's migrate to Swift 3.0
 
Apache Cassandra in Bangalore - Cassandra Internals and Performance
Apache Cassandra in Bangalore - Cassandra Internals and PerformanceApache Cassandra in Bangalore - Cassandra Internals and Performance
Apache Cassandra in Bangalore - Cassandra Internals and Performance
 
Apache Con NA 2013 - Cassandra Internals
Apache Con NA 2013 - Cassandra InternalsApache Con NA 2013 - Cassandra Internals
Apache Con NA 2013 - Cassandra Internals
 
JDO 2019: Container orchestration with Docker Swarm - Jakub Hajek
JDO 2019: Container orchestration with Docker Swarm - Jakub HajekJDO 2019: Container orchestration with Docker Swarm - Jakub Hajek
JDO 2019: Container orchestration with Docker Swarm - Jakub Hajek
 

Último

%+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 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 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
 
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Medical / Health Care (+971588192166) Mifepristone and Misoprostol tablets 200mg
 

Último (20)

Artyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptxArtyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptx
 
%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
 
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...
 
%+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...
 
WSO2Con204 - Hard Rock Presentation - Keynote
WSO2Con204 - Hard Rock Presentation - KeynoteWSO2Con204 - Hard Rock Presentation - Keynote
WSO2Con204 - Hard Rock Presentation - Keynote
 
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 - Freedom First—Unleashing Developer Potential with Open Source
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open SourceWSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
 
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
 
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
 
%+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...
 
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
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the past
 
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
 
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
 
%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
 
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
 
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
 
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
 

Messaging in CQRS with MassTransit