What is NServiceBus?
• Asynchronous Messaging Framework• Durable messaging with MSMQ• Moderately Opinionated• Event Driven Autonomous Services as
opposed to RPC Web Services
Yeah? So… What about it?
SOA Provides:• Freedom of design and implementation • Unprecedented flexibility for growth & change• Waste nearly no code on pure technical concerns
SOA with Messaging VS.
N-Tier with RPC
Outline & Disclaimer
• Just presenting a different possibility
• Mainly talking and pictures, with a little code:– Intro to Messaging with NServiceBus– Messaging Patterns– Modeling using Messages– Autonomous Services, Boundaries and Decoupling via
Messaging– Architecture Overview– SOA Composite Application Demo
App
Messaging with Queues
App
SendQueueQueue
Receive
Makes for inherently asynchronous systems able to deal with spikes in load
Tx
App
Messaging with Transactional Queues
Tx
App
SendQueueQueue
Receive
Rollback
Makes robust applications simple to implement
Save or UpdateRollback
Tx
App
Messaging with Durable Queues = Store & Forward
Tx
App
SendQueueQueue
Receive
Provides an alternative and elegant solution to availability & data loss
Tx
App
Durable Transactional Queues = Fire & Forget
Tx
App
SendQueueQueue
Receive
Which we leverage thru NServiceBus to build much simpler, more flexible and scalable solutions
Publisher
Subscriber
Subscribe
Subscriber
Subscriber
Subscriber
Subscriber
Publisher
Subscriber
Subscriber
Subscriber
Subscriber
Subscriberabcdefgh
abcdefgh
abcdefgh
abcdefgh
abcdefgh
Decisions Based on Past EventsPlace Order
Order Service
Billing Service
Order Placed
Customer Billed
Set Max Debit For Customer
Current Debt > Max Debt
Customer ID
Max Debt
Current Balance
Billing Service
Web UIWeb UI
UI
Code Demo: Stock Trading Website
IBM
+7.
56IN
TC +
0.34
Ordering Service
Stock Ticker Service
GOOG
+0.3
4 APPL
-2.3
MSF
T -5
.6
Place OrderO
rder
Acc
epte
d
Customer Billed
Modeling with MessagesCommand
Service
Service
Service
Service
Events
Events
Modeling with commands & eventsUpdate Customer
Customer Service
Address Service
Validation Service
Transaction Service
Customer Updated
Modeling with commands & eventsPlace Order
Order Service
Shipping Service
Billing Service
Customer Care Service
Order Placed
Customer Notified of Order Placed
Order Billed
Order Shipped
Sales Service
Polymorphism, BC’s and DDD oh my!
Orders Service
Handle Place Order
Place Customers First Order
Place Order
Send Customer Catalogue & Order Forms
New Lead Identified
Order Accepted
Handle Place Order
Handle First
Order
Order Accepted
What is a service?
Some code which exists exclusively as part of a service
providing the sole source of a
given business capability to an organization
What is a service?
It is made up of:
An Autonomous ServiceMVC Controllers &
ViewsXAML &
Presenters
Message Handlers
Business Logic
Some Persistent Store
• No “Orchestration” code
• No “Management” code
• No Transformation code
• No Data Access code
• No Data “Munging” code
• No Error Handling
• No Unreachable code
• No unintended or unused code paths
• No code except business abstractions
What else is a service?
• Services are autonomous
Decoupling with a Message Schema
Service A
Mgs Schema A
Service B
Mgs Schema B
Bus
Composed application
Billing Service
Order Service
Pricing Service
Product Catalogue
Service
Layout & Branding Service
User Application Executable
Bus
NSB Host
Exec(s).
NSB HostExec(s).
NSB Host
Exec(s).
NSB Host
Exec(s).
Code Demo – CrazyJimsSOA
• Composing a UI from many logically distinct components
Layout & Branding Service
MVC Controllers
HTML + JavaScript
Catalogue Service
MVC Controllers
Pricing Service Ordering Service
MVC Controllers
MVC Controllers
Catalogue Service
MVC Controllers
Pricing Service Ordering Service
Layout & Branding Service
MVC Controllers
MVC Controllers
MVC Controllers
{JSON} + <jTemplate \>
{JSON} + <jTemplate \>
{JSON} + <jTemplate \>
HTML + JavaScript
#WIN like this…
• Freedom of design and implementation • Unprecedented flexibility for growth & change• Waste nearly no code on pure technical concerns
Thanks & Resources• Thanks to @UdiDahan checkout his ADSD course! - http
://www.udidahan.com/training/#Advanced_Distributed_System_Design
• NServiceBus Website (Documentation & Community Sections are great) – http://www.nservicebus.com/
• Distributed Podcast - http://distributedpodcast.com/• NServiceBus Mailing List - http://tech.groups.yahoo.com/group/nservicebus/• Other Mailing Lists –
– http://groups.google.com/group/dddcqrs?pli=1– http://tech.groups.yahoo.com/group/service-orientated-architecture/– http://tech.groups.yahoo.com/group/domaindrivendesign/messages
Questions?
AC’s, BC’s and DDD oh my!
Order Service
Order Processing running in NServiceBus.Host.exe
Order Placement UI running in a web site
AC – Business Logic
AC -Persistent View Model Store
What is CQRS?
UI
Command Handlers
View Model Updaters
CommandsEv
ents
Queries
Where does CQRS fit in the picture?
Billing Service
Order Service
Pricing Service
Product Service
Layout & Branding Service
User Application Executable
Bus
NSB Host
Exec(s).
NSB HostExec(s).
NSB Host
Exec(s).
NSB Host
Exec(s).
Comm
ands Even
ts
Comm
ands