320 likes | 460 Views
How to Swing a Service Bus Like You Mean It. SOA with NServiceBus. Jim Pelletier @pjimmy mail@thejimmyp.com. What is NServiceBus?. Asynchronous Messaging Framework Durable messaging with MSMQ Moderately Opinionated Event Driven Autonomous Services as opposed to RPC Web Services.
E N D
How to Swing a Service Bus Like You Mean It SOA with NServiceBus Jim Pelletier @pjimmy mail@thejimmyp.com
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
Messaging with Queues Send Receive Queue Queue App App Makes for inherently asynchronous systems able to deal with spikes in load
Messaging with Transactional Queues Tx Tx Send Receive Queue Queue Save or Update App App Rollback Rollback Makes robust applications simple to implement
Messaging with Durable Queues = Store & Forward Tx Tx Send Receive Queue Queue App App Provides an alternative and elegant solution to availability & data loss
Durable Transactional Queues = Fire & Forget Tx Tx Send Receive Queue Queue App App Which we leverage thru NServiceBus to build much simpler, more flexible and scalable solutions
Subscriber Publisher Subscribe Subscriber Subscriber Subscriber Subscriber
Subscriber Publisher abcdefgh abcdefgh abcdefgh abcdefgh abcdefgh Subscriber Subscriber Subscriber Subscriber
Decisions Based on Past Events Order Service Place Order Order Placed Billing Service Current Debt > Max Debt Customer Billed Customer ID Max Debt Current Balance Set Max Debit For Customer
Code Demo: Stock Trading Website Ordering Service Web UI Web UI UI Place Order IBM +7.56 APPL -2.3 GOOG +0.34 Order Accepted INTC +0.34 MSFT -5.6 Billing Service Stock Ticker Service Customer Billed
Modeling with Messages Service Command Events Service Service Service Events
Modeling with commands & events Customer Service Update Customer Customer Updated Address Service Validation Service Transaction Service
Modeling with commands & events Order Service Place Order Order Placed Shipping Service Order Shipped Billing Service Order Billed Customer Care Service Customer Notified of Order Placed
Polymorphism, BC’s and DDD oh my! Orders Service Handle Place Order Place Order Order Accepted Order Accepted Handle Place Order Handle First Order Sales Service Place Customers First Order Send Customer Catalogue & Order Forms New Lead Identified
What is a service? Some codewhich 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 • No “Orchestration” code • No“Management” code • No Transformation code • NoData Access code • NoData “Munging” code • NoError Handling • No Unreachable code • Nounintended or unused code paths • No code except business abstractions Business Logic Message Handlers Some Persistent Store
What else is a service? • Services are autonomous
Decoupling with a Message Schema Mgs Schema A Mgs Schema B Service A Service B Bus
Composed application User Application Executable Layout & Branding Service Product Catalogue Service Pricing Service Order Service Billing Service NSB Host Exec(s). NSB Host Exec(s). NSB Host Exec(s). NSB Host Exec(s). Bus
Code Demo – CrazyJimsSOA • Composing a UI from many logically distinct components
Layout & Branding Service MVC Controllers HTML + JavaScript Pricing Service Catalogue Service Ordering Service MVC Controllers MVC Controllers MVC Controllers
Layout & Branding Service MVC Controllers HTML + JavaScript {JSON} + <jTemplate \> {JSON} + <jTemplate \> {JSON} + <jTemplate \> Pricing Service Catalogue Service Ordering Service MVC Controllers MVC Controllers MVC Controllers
#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
How to Swing a Service Bus Like You Mean It SOA with NServiceBus Jim Pelletier @pjimmy mail@thejimmyp.com
AC’s, BC’s and DDD oh my! Order Service Order Placement UI running in a web site Order Processing running in NServiceBus.Host.exe
What is CQRS? AC -Persistent View Model Store UI Queries View Model Updaters Events AC – Business Logic Command Handlers Commands
Where does CQRS fit in the picture? User Application Executable Layout & Branding Service Product Service Pricing Service Order Service Billing Service Commands Commands Events NSB Host Exec(s). NSB Host Exec(s). NSB Host Exec(s). NSB Host Exec(s). Bus