NServiceBus-Devsum10

959 views
886 views

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
959
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
22
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

NServiceBus-Devsum10

  1. 1. Building enterprise applications with NServiceBus Andreas Öhlund twitter: @andreasohlund blog: andreasohlund.blogspot.com tisdag den 15 juni 2010
  2. 2. What is a distributed system? “A distributed system is one in which the failure of a computer you didn't even know existed can render your own computer unusable” -Leslie Lamport tisdag den 15 juni 2010
  3. 3. The first rule of NServiceBus tisdag den 15 juni 2010
  4. 4. There is NO Service Bus! The first rule of NServiceBus tisdag den 15 juni 2010
  5. 5. Well, at least no physical one tisdag den 15 juni 2010
  6. 6. The key to robust communication tisdag den 15 juni 2010
  7. 7. Store and forward tisdag den 15 juni 2010
  8. 8. Request/Response the NServiceBus way Fire and forget X 2 tisdag den 15 juni 2010
  9. 9. The effects of tight coupling Temporal Behavioral tisdag den 15 juni 2010
  10. 10. Communication and coupling Low command - oriented event - oriented Temporal distributed 3-layer Emergency services High High Low Behavioural tisdag den 15 juni 2010
  11. 11. Coupling NServiceBus style Low Command - oriented Event - oriented Temporal High Distributed 3-layer Emergency services High Behavioural Low tisdag den 15 juni 2010
  12. 12. Command oriented communication CompleteSaleCommand OnlineSales OrderService tisdag den 15 juni 2010
  13. 13. Sending Messages IBus.Send() bus.Send(new CompleteSaleCommand CreateOrderCommand { ProductId = 123, OnlineSales Quantity = 10 .... }); tisdag den 15 juni 2010
  14. 14. Receiving and processing of messages public class CompleteSaleMessageHandler: CreateOrderCommand IHandleMessages<CompleteSaleCommand> { OrderService public void Handle(CompleteSaleCommand c) { ... } } tisdag den 15 juni 2010
  15. 15. Throttling the load • Manage traffic peaks • Consumer controls the pace • <MsmqTransportConfig NumberOfWorkerThreads="3" /> tisdag den 15 juni 2010
  16. 16. What happens when the load becomes to heavy for one server? tisdag den 15 juni 2010
  17. 17. Scaling with the Distributor tisdag den 15 juni 2010
  18. 18. Building consistent systems • Do we produce predictable results even under failure conditions? • What about non transactional sources? tisdag den 15 juni 2010
  19. 19. Isolate non transactional sources as separate endpoints public void Handle(CompleteSaleCommand cmd) { var order = .... orderRepository.Save(order) smtpClient.Send(new MailMessage{...}) } tisdag den 15 juni 2010
  20. 20. Isolate non transactional sources as separate endpoints public void Handle(CompleteSaleCommand cmd) { public void Handle(CompleteSaleCommand cmd) { var order = .... orderRepository.Save(order) var order = .... orderRepository.Save(order) bus.Send(new NotifyCustomerRequest { smtpClient.Send(new MailMessage{...}) } EmailAddress = customer.Email, Body = “Order confirmation” }); } tisdag den 15 juni 2010
  21. 21. When things go wrong tisdag den 15 juni 2010
  22. 22. Messaging gives you a chance to do better • No more showing the users a WSOD • Messages are replayable • Async communication opens up a crucial windows of time for corrections tisdag den 15 juni 2010
  23. 23. Coupling NServiceBus style Low Command - oriented Event - oriented Temporal High Distributed 3-layer Emergency services High Low Behavioural tisdag den 15 juni 2010
  24. 24. Publish and subscribe tisdag den 15 juni 2010
  25. 25. Billing BillingService OrderAcceptedEvent Shipping SalesService ShippingService Sales Business events tisdag den 15 juni 2010
  26. 26. Finally a chance to discuss non functional requirements that business people understand tisdag den 15 juni 2010
  27. 27. The mechanics of pub/sub tisdag den 15 juni 2010
  28. 28. The mechanics of pub/sub tisdag den 15 juni 2010
  29. 29. Becoming a subscriber bus.Subcribe<IOrderAcceptedEvent>(); tisdag den 15 juni 2010
  30. 30. Publishing bus.Publish<IOrderAcceptedEvent>(x=> { ProductId = 123, Quantity = 10 .... }); tisdag den 15 juni 2010
  31. 31. It’s hard to get it right the first time around tisdag den 15 juni 2010
  32. 32. Versioning events using interfaces public interface IOrderAcceptedEvent2 : IOrderAcceptedEvent { string SomeNewProperty{ get;set; } } tisdag den 15 juni 2010
  33. 33. Configuration Developers: use code Administrators: use config files tisdag den 15 juni 2010
  34. 34. Getting your stuff to production tisdag den 15 juni 2010
  35. 35. The generic host to the rescue tisdag den 15 juni 2010
  36. 36. The generic host to the rescue public class EndpointConfig: IConfigureThisEndpoint, AsA_Publisher { } tisdag den 15 juni 2010
  37. 37. Using profiles to adapt to different environments tisdag den 15 juni 2010
  38. 38. NServiceBus is opinionated tisdag den 15 juni 2010
  39. 39. Why all these opinions? tisdag den 15 juni 2010
  40. 40. The end • www.nservicebus.com • www.udidahan.com/blog • andreasohlund.blogspot.com tisdag den 15 juni 2010

×