How to Swing a Service Bus Like You Mean It SOA with NServiceBus Jim
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
AppApp Messaging with Queues AppApp Send Queue Receive Makes for inherently asynchronous systems able to deal with spikes in load
TxTx AppApp Messaging with Transactional Queues TxTx AppApp Send Queue Receive Rollback Makes robust applications simple to implement Save or Update Rollback
TxTx AppApp Messaging with Durable Queues = Store & Forward TxTx AppApp Send Queue Receive Provides an alternative and elegant solution to availability & data loss
TxTx AppApp Durable Transactional Queues = Fire & Forget TxTx AppApp Send Queue Receive Which we leverage thru NServiceBus to build much simpler, more flexible and scalable solutions
Publisher Subscriber Subscribe Subscriber
Publisher Subscriber abcdefgh
Decisions Based on Past Events Place 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 UI UI Code Demo: Stock Trading Website IBM INTC Ordering Service Stock Ticker Service GOOG APPL -2.3 MSFT -5.6 Place Order Customer Billed
Modeling with Messages Command Service Events
Modeling with commands & events Update Customer Customer Service Address Service Validation Service Transaction Service Customer Updated
Modeling with commands & events Place 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 Service MVC Controllers & Views XAML & 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 Host Exec(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
Catalogue Service MVC Controllers Pricing Service Ordering Service Layout & Branding Service MVC Controllers {JSON} + 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 checkout his ADSD course! NServiceBus Website (Documentation & Community Sections are great) – Distributed Podcast - NServiceBus Mailing List - Other Mailing Lists – – – –
Questions?
How to Swing a Service Bus Like You Mean It SOA with NServiceBus Jim
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 Commands Events 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 Host Exec(s). NSB Host Exec(s). NSB Host Exec(s). NSB Host Exec(s). NSB Host Exec(s). NSB Host Exec(s). NSB Host Exec(s). Commands Events Commands