Learning NServiceBus Sagas Discover how to design, build, and test sagas and messaging with NServiceBus Rich Helton professional expertise distilled P U B L I S H I N G BIRMINGHAM - MUMBAI Learning NServiceBus Sagas Copyright © 2015 Packt Publishing All rights reserved. No part of this book may be reproduced, stored in a retrieval system, or transmitted in any form or by any means, without the prior written permission of the publisher, except in the case of brief quotations embedded in critical articles or reviews. Every effort has been made in the preparation of this book to ensure the accuracy of the information presented. However, the information contained in this book is sold without warranty, either express or implied. Neither the author, nor Packt Publishing, and its dealers and distributors will be held liable for any damages caused or alleged to be caused directly or indirectly by this book. Packt Publishing has endeavored to provide trademark information about all of the companies and products mentioned in this book by the appropriate use of capitals. However, Packt Publishing cannot guarantee the accuracy of this information. First published: January 2015 Production reference: 1240115 Published by Packt Publishing Ltd. Livery Place 35 Livery Street Birmingham B3 2PB, UK. ISBN 978-1-78217-349-6 www.packtpub.com Credits Author Project Coordinator Rich Helton Mary Alex Reviewers Proofreaders Neil Bourgeois Samuel Redman Birch Prashant Brall Maria Gould Mark Huber Bernadette Watkins Commissioning Editor Indexer Usha Iyer Monica Ajmera Mehta Acquisition Editor Graphics Kevin Colaco Valentina D'silva Content Development Editors Production Coordinator Akshay Nair Nilesh R. Mohite Priya Singh Cover Work Arvindkumar Gupta Technical Editor Edwin Moses Nilesh R. Mohite Copy Editors Sarang Chari Puja Lalwani Veena Mukundan About the Author Rich Helton, as a principal software engineer, builds and reviews large-scale systems and trains hundreds of developers as well. Rich has spent over 2 decades in designing and building systems. During this time, he has built, architected, and designed multiple systems, as well as managed many different technical teams. He has built many large-scale enterprise solutions using the most popular C# and Java frameworks and has expertise in the financial, aeronautical, and security domains. Rich's passion for designing and teaching HTML5, ESBs, ORM's test-driven development, NoSQL, iOS, IoCs, and cloud and iPad development was discovered while training developers and architects. He freely shares some of the slides from these trainings on http://www.slideshare.net/rhelton_1. I would like to thank my wife, Johennie, and my daughters, Ashley and Courtney, for their ongoing support. About the Reviewers Neil Bourgeois is a software engineer at Pentair Technical Solutions, where he leads the Engineering Software team. Solutions he has architected and implemented include a high-volume metering and billing system for the utilities industry and an industry-leading 3D engineering tool for the industrial heat-tracing field. He applies the discipline of Agile software development to his work and believes that great software comes from great team cultures. He strives to lead his teams to great cultures. Prashant Brall is a principal consultant and senior software architect/developer who uses Microsoft technologies. He works for Veritec Pty Ltd (www.veritec.com.au) in Canberra, Australia, and has been developing software for the past 18 years. He enjoys writing about his experiences on his blog at https://prashantbrall.wordpress.com. Prashant has also reviewed the book Instant AutoMapper, Packt Publishing. In his leisure time, he enjoys watching movies with his wife and playing musical instruments. I would like to thank my fantastic wife, Jhumur, for being my best friend and for all the love and support she has given me. I would also like to thank my parents Mr. Hem Brall and Mrs. Prabha Brall for all the guidance, love, and care they have given me. Mark Huber is a developer, team manager, and general-purpose tech enthusiast who lives and works in Dallas, Texas. In the last several years, he has focused on specializing in large-scale web platforms in the automotive market. He has spent the majority of his time in the .NET environment, but believes the key to mastering your preferred domain is expanding beyond traditional boundaries to look at how other languages and technologies approach the same problems. He has been an avid researcher of other platforms including Java, Ruby, Python, and others. He is also a strong advocate of interweaving .NET projects with supporting open source technologies not traditionally considered with a .NET platform, such as ElasticSearch, Redis, RabbitMQ, Memcached, and others. Mark is currently a software development manager working at Dealer.com, a Dealertrack technology solution. He is privileged to work with a team of developers, QA, DevOps, product owners, and many others, who truly live the principles and values of the Agile Manifesto (http://agilemanifesto.org/) as well as view their work through the lens of the Software Craftsmanship Manifesto (http://manifesto. softwarecraftsmanship.org/). I would like to extend a heartfelt thank you to my colleagues, mentors, friends, and most importantly my family, who have been an unending stream of support and growth over the years. Without them, I would not be where I am today. "Perfecting oneself is as much unlearning as it is learning." - Edsgar Dijkstra www.PacktPub.com Support files, eBooks, discount offers, and more For support files and downloads related to your book, please visit www.PacktPub.com. Did you know that Packt offers eBook versions of every book published, with PDF and ePub files available? You can upgrade to the eBook version at www.PacktPub. com and as a print book customer, you are entitled to a discount on the eBook copy. Get in touch with us at [email protected] for more details. At www.PacktPub.com, you can also read a collection of free technical articles, sign up for a range of free newsletters and receive exclusive discounts and offers on Packt books and eBooks. TM https://www2.packtpub.com/books/subscription/packtlib Do you need instant solutions to your IT questions? PacktLib is Packt's online digital book library. Here, you can search, access, and read Packt's entire library of books. Why subscribe? • Fully searchable across every book published by Packt • Copy and paste, print, and bookmark content • On demand and accessible via a web browser Free access for Packt account holders If you have an account with Packt at www.PacktPub.com, you can use this to access PacktLib today and view 9 entirely free books. Simply use your login credentials for immediate access. Table of Contents Preface 1 Chapter 1: Introduction to Sagas 9 A brief introduction to ESBs 10 Event-driven jobs 14 Additional SOA patterns 15 The publish-subscribe pattern 15 The request-reply pattern 17 The gateway pattern 18 The source code 19 The DataBus pattern 21 Timeout patterns 22 Message mutation patterns 28 The source code 29 Message encryption patterns 30 The source code 30 The ScaleOut pattern 32 The saga design pattern 32 Sagas – what are they good for? 34 Summary 37 Chapter 2: NServiceBus Saga Architecture 39 Upgrading from NSB version 4 to 5 39 The saga workflow 41 Message flow 48 Deployment 55 ServiceInsight 56 Summary 58