Presentation is loading. Please wait.

Presentation is loading. Please wait.

David Boike Presentation and source:

Similar presentations


Presentation on theme: "David Boike Presentation and source:"— Presentation transcript:

1 David Boike www.make-awesome.com @DavidBoike Presentation and source: http://bit.ly/fOn4U9

2 Real-Life Example using (TransactionScope ts = new TransactionScope()) { InsertOrUpdateAlertPreferences(); UpdateAlertEmails(); InternalWebService.UpdateEmailSettings(listID, emailAddresses); ts.Complete(); }

3 Real-Life Example – It Gets Worse using (TransactionScope ts = new TransactionScope()) { InsertOrUpdateAlertPreferences(); UpdateAlertEmails(); InternalWebService.UpdateEmailSettings(listID, emailAddresses); ExternalWebService.UpdateSmsSettings(keyword, phoneNumber); ts.Complete(); }

4 NServiceBus to the rescue! Enterprise Service Bus for.NET Not a centralized broker like BizTalk Not a services communication framework like WCF Created by Udi Dahan, internationally renowned expert on software architecture and design Focuses on messaging and publish/subscribe Ultra reliable Provides friction against poor architecture decisions

5 How it Works Utilizes assembly scanning for component discovery Uses marker interfaces to identify message schemas, message handlers, configuration sources, etc. Uses dependency injection (inversion of control) to detect and provide dependencies and services Everything is pluggable

6 App How an Endpoint Works MSMQ Transactional Receive

7 Transaction App How an Endpoint Works MSMQ Transactional Receive

8 Transaction App How an Endpoint Works MSMQ DB Perform database operations within the distributed transaction

9 Transaction App How an Endpoint Works MSMQ Web Service Or connect to a traditional web service

10 Transaction App How an Endpoint Works MSMQ Send or publish additional messages

11 Transaction Transient Errors If an exception happens, the transaction rolls back and returns the message to the queue. Transaction Rolling Back Transaction Rolling Back Exception App MSMQ Automatic retries are an integral part of the system.

12 Transaction Rolling Back Transaction Rolling Back Poison Messages After a configurable number of retries, poison messages get sent to an error queue. App MSMQ Error Fix the underlying issue, and you can return error messages to their source queue.

13 Real-Life Example - Revisited Webapp Bus.Send(new SaveAlertsCmd()); Alert Service Bus.Publish(new AlertsUpdatedEvent()); SMS Adapter Web Svc Adapter Bus.Subscribe (); Subscriptions

14 Getting Started Go to http://www.nservicebus.comhttp://www.nservicebus.com Click the Download link Follow the instructions Be sure to run RunMeFirst.bat from the command prompt with admin rights! Installs and/or verifies MSMQ configuration Sets the appropriate settings on the Microsoft Distributed Transaction Coordinator Installs performance counters Run from the command prompt so you can see if there are any errors.

15

16 If you are watching the presentation live, the next several slides are apt to be very boring. Sorry. For those of you at home, this is what we did so you can follow along in the code samples.

17 Code Phase 1: Messaging Create MyMessages assembly Add reference to NServiceBus.dll Add CreateUserCmd

18 Code Phase 1: Messaging Create UserService assembly Add reference to NServiceBus.dll, NServiceBus.Core.dll, NServiceBus.Host.exe, and Log4Net Add IConfigureThisEndpoint, AsA_Publisher Add UserCreator service implementing IHandleMessages Add Start Action to run NServiceBus.Host.exe

19 Code Phase 1: Messaging Modify web project Add Global.asax, providing a global home for the web application’s IBus instance Modify Web.config with NServiceBus configuration Modify Register.aspx.cs to send the message

20 Code Phase 2: Saga/Verification CreateUserSagaData : ISagaEntity Copy properties from CreateUserCmd Add VerificationString property Change from service handling CreateUserCmd to saga started by CreateUserCmd Set saga data from command Override ConfigureHowToFindSaga, calling ConfigureMapping () method

21 Code Phase 2: Saga/Verification “Send” verification email Create SendVerificationEmailCmd Create mock handler that logs verification code to console Configure UserCreator App.config to send to the UserService (itself, although this could be a separate project) Send SendVerificationEmailCmd from the Handle method

22 Code Phase 2: Saga/Verification Verify the email Create VerifyEmailCmd in MyMessages Create UserCreatedEvent in MyMessages Add IHandle to saga and configure how to find saga data from this command Add implementation, actually creating user in DB MarkAsComplete(), log, and Bus.Return(0)

23 Code Phase 2: Saga/Verification Web handler for email link Create Verify.aspx Configure Web.config to send VerifyEmailCmd to UserService Change Register.aspx.cs redirect from Login to Verify

24

25 Where to learn more NServiceBus website: www.nservicebus.comwww.nservicebus.com My blog: www.make-awesome.comwww.make-awesome.com Ask on Stack Overflow (tag with “nservicebus”) Udi’s blog: www.udidahan.comwww.udidahan.com Andreas Ohlund’s blog: www.andreasohlund.netwww.andreasohlund.net Jonathan Oliver’s blog: www.jonathanoliver.comwww.jonathanoliver.com Twitter: #NServiceBus Presentation Source Code: http://bit.ly/fOn4U9http://bit.ly/fOn4U9


Download ppt "David Boike Presentation and source:"

Similar presentations


Ads by Google