NServiceBus Alt.Net 20100511

3 months ago

Loading…

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

Do you like this presentation?

No comments yet

Post a comment

    Login or Signup to post a comment
    Login to SlideShare
    Login to Twitter
    Edit your comment Cancel

    1 Favorite

    NServiceBus Alt.Net 20100511 - Presentation Transcript

    1. Building enterprise applications with NServiceBus Andreas Öhlund onsdag den 12 maj 2010
    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 onsdag den 12 maj 2010
    3. The first rule of NServiceBus onsdag den 12 maj 2010
    4. There is NO Service Bus! The first rule of NServiceBus onsdag den 12 maj 2010
    5. Well, at least no physical one onsdag den 12 maj 2010
    6. The second rule of NServiceBus onsdag den 12 maj 2010
    7. You DO NOT use synchronous communication The second rule of NServiceBus onsdag den 12 maj 2010
    8. The key to robust communication onsdag den 12 maj 2010
    9. Store and forward onsdag den 12 maj 2010
    10. Request/Response the NServiceBus way Fire and forget X 2 onsdag den 12 maj 2010
    11. The effect of tight coupling Temporal Behavioral onsdag den 12 maj 2010
    12. Communication and coupling onsdag den 12 maj 2010
    13. Coupling NServiceBus style onsdag den 12 maj 2010
    14. Command oriented communication CompleteSaleCommand OnlineSales OrderService onsdag den 12 maj 2010
    15. Sending Messages IBus.Send() bus.Send(new CompleteSaleCommand CreateOrderCommand { ProductId = 123, OnlineSales Quantity = 10 .... }); onsdag den 12 maj 2010
    16. Receiving and processing of messages public class CompleteSaleMessageHandler: CreateOrderCommand IHandleMessages<CompleteSaleCommand> { OrderService public void Handle(CompleteSaleCommand c) { ... } } onsdag den 12 maj 2010
    17. Message Contracts • Versioned by the owner • Regular .Net Assembly • Bound to a input queue • class MyMessage : IMessage onsdag den 12 maj 2010
    18. Throttling the load • Manage traffic peaks • Consumer controls the pace • <MsmqTransportConfig NumberOfWorkerThreads="3" /> onsdag den 12 maj 2010
    19. What happens when the load becomes to heavy for one server? onsdag den 12 maj 2010
    20. Scaling with the Distributor onsdag den 12 maj 2010
    21. Building consistent systems • Do we produce predictable results even under failure conditions? • What about non transactional sources? onsdag den 12 maj 2010
    22. Isolate non transactional sources as separate endpoints public void Handle(CompleteSaleCommand cmd) { var order = .... orderRepository.Save(order) smtpClient.Send(new MailMessage{...}) } onsdag den 12 maj 2010
    23. 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” }); } onsdag den 12 maj 2010
    24. Idempotent “Idempotent operations are operations that can be applied multiple times without changing the result” onsdag den 12 maj 2010
    25. When things go wrong onsdag den 12 maj 2010
    26. 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 onsdag den 12 maj 2010
    27. Event oriented communication onsdag den 12 maj 2010
    28. Publish and subscribe • Everyone get’s a copy • Removes behavioral coupling onsdag den 12 maj 2010
    29. Billing BillingService OrderAcceptedEvent Shipping SalesService ShippingService Sales Business events onsdag den 12 maj 2010
    30. Finally a chance to discuss non functional requirements that business people understand onsdag den 12 maj 2010
    31. The mechanics of pub/sub onsdag den 12 maj 2010
    32. The mechanics of pub/sub onsdag den 12 maj 2010
    33. Becoming a subscriber bus.Subcribe<IOrderAcceptedEvent>(); onsdag den 12 maj 2010
    34. Publishing bus.Publish<IOrderAcceptedEvent>(x=> { ProductId = 123, Quantity = 10 .... }); onsdag den 12 maj 2010
    35. It’s hard to get it right the first time around onsdag den 12 maj 2010
    36. Versioning events using interfaces public interface IOrderAcceptedEvent2 : IOrderAcceptedEvent { string SomeNewProperty{ get;set; } } onsdag den 12 maj 2010
    37. Long running transactions onsdag den 12 maj 2010
    38. Use sagas to model long running transactions public  class  MySaga  :  Saga<MySagaData>,        IAmStartedByMessages<Message1>,        IHandleMessages<Message2> {        public  void  Handle(Message1  message)        {                //  code  to  handle  Message1        }        public  void  Handle(Message2  message)        {                //  code  to  handle  Message2        } } onsdag den 12 maj 2010
    39. Storing state public  class  MySagaData  :  IContainSagaData {        //  the  following  properties  are  mandatory        public  virtual  Guid  Id  {  get;  set;  }        public  virtual  string  Originator  {  get;  set;  }        public  virtual  string  OriginalMessageId  {  get;  set;  } } onsdag den 12 maj 2010
    40. Timeouts public  void  Handle(Message1  message) {        this.Data.SomeID  =  message.SomeID;        RequestTimeout(TimeSpan.FromHours(1),  "some  state"); } public  override  void  Timeout(object  state) {      //  some  business  action  like:      if  (!Data.Message2Arrived)            ReplyToOriginator(new  TiredOfWaitingForMessage2()); } onsdag den 12 maj 2010
    41. Configuration Developers: use code Administrators: use config files onsdag den 12 maj 2010
    42. Hosting options • Custom hosting • Website • Smartclient • Commandline • Generic host onsdag den 12 maj 2010
    43. Using the Generic Host public class EndpointConfig: IConfigureThisEndpoint, AsA_Publisher { } onsdag den 12 maj 2010
    44. Using profiles to adapt to different environments onsdag den 12 maj 2010
    45. NServiceBus role in CQRS Style applications onsdag den 12 maj 2010
    46. NServiceBus is opinionated onsdag den 12 maj 2010
    47. Why all these opinions? onsdag den 12 maj 2010
    48. Don’t use messaging for queries • Queries need to return relatively fast • No benefit from the robustness that NSB gives • Use NSB to cache data close and use native apis to get at that data onsdag den 12 maj 2010
    49. The end • www.nservicebus.com • www.udidahan.com/blog • andreasohlund.blogspot.com onsdag den 12 maj 2010

    andreasohlundandreasohlund + Follow

    861 views, 1 fav, 1 embed

    About this presentation

    Usage Rights

    © All Rights Reserved

    Stats

    • 1 Favorites
    • 0 Comments
    • 16 Downloads
    • 809 Views on
      SlideShare
    • 52 Views on
      Embeds
    • 861 Total Views

    Embed views

    • 52 views on http://www.slideshare.net

    more

    Embed views

    • 52 views on http://www.slideshare.net

    less

    Accessibility

    Additional Details

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint

    Follow SlideShare