Ride The Bus!

Preview:

Citation preview

d60 developing smart software solutions

Ride the bus! April 2012

Mogens  Heller  Grabe  

     

mhg@d60.dk  @mookid8000  

h8p://mookid.dk/oncode  

Agenda  

•  What  is  messaging  •  Doing  it  with  NServiceBus  •  Enter  the  saga  

What  is  messaging?  

void  CreatePresentation(string  name);    -­‐-­‐    someObject.CreatePresentation(“Ride  The  Bus!”);  

What  is  messaging?  

•  Networks  are  unreliable  •  Inter-­‐process  communicaKon  is  dead  slow  •  The  other  process  might  not  be  there  at  the  moment  

•  etc  •  etc  

What  is  messaging?  

void  CreatePresentation(CreatePresentationArgs  args);    -­‐-­‐    var  args  =  new  CreatePresentationArgs  {  

 Title  =  “Ride  The  Bus!”  };    someObject.CreatePresentation(args);  

What  is  messaging?  

void  Process(Args  args);    -­‐-­‐    someObject.Process(new  CreatePresentation  {  

 Title  =  “Ride  The  Bus!”  });    someObject.Process(new  Something());    someObject.Process(new  SomethingElse());  

What  is  messaging?  

void  

InteresKng  properKes  

•  Can  be  persisted  •  Can  be  forwarded  •  etc  

Persisted?  

MSMQ  can  do  that!  

•  Ships  with  all  modern  versions  of  Windows  •  Your  MSMQ  endpoint  is  always  local  –  remoKng  is  taken  care  of  via  outgoing  queues  

•  .NET  client  in  System.Messaging  (GAC).    

Bus?  

•  Each  service  has  its  own  input  queue.  

•  When  a  service  needs  to  send  a  message,  the  bus  looks  up  the  desKnaKon  somehow.  

•  How  desKnaKons  are  looked  up  depends  on  whether  the  service  is  sending  or  publishing.  

Messaging  Pa8erns  

“Request/reply”  

+  “Return  address”    +  maybe  “CorrelaKon  idenKfier”  

“Publish/subscribe”  

“Publish/subscribe”  

Request/reply  vs.  Publish/subscribe  

“Process  manager”  

+  “CorrelaKon  idenKfier”  

How  to  do  these  things  IRL  

•  Commercial  – NServiceBus  

•  Free  alternaKves  – MassTransit  – RhinoESB  – Rebus(*)  

NServiceBus  

•  Currently  in  version  3.0  

•  Licensing  – <=  2.0  are  free  – >=  2.5  cost  money  

Show  me  the  code  

•  Now  let’s  see  how  “Request/reply”  looks  with  NServiceBus  – We  have  a  pre8y  unreliable  web  service,  umm  “Whatchamacallit”,  that  we  want  to  call.  

– We  build  an  integraKon  service  with  NServiceBus  that  works  as  a  messaging  façade  towards  the  web  service.  

–  Our  system  requests  stuff  from  the  façade,  the  façade  replies.  

Show  me  the  code  

•  Now,  let’s  see  an  example  with  some  Pub/sub  acKon  – We  have  a  service  that  processes  something,  “Somekindofprocessor”,  when  it  receives  a  ProcessSomething  command.  

–  In  order  to  process  stuff,  it  needs  to  get  the  important  string  from  our  unreliable  web  service  from  before.  

– When  processing  is  done,  it  should  publish  the  result,  allowing  any  other  interested  services  to  react  to  this.  

What  just  happened?  

What  just  happened?  

The  real  world  is  a  place...  

•  ...where  we  can’t  always  process  messages  in  a  stateless  manner  like  this...  

•  ...where  mulKple  things  need  coordinaKon  and  will  not  always  succeed/fail  as  a  whole...  

Enter  the  saga!  

•  A  model  for  long-­‐lived  transacKons.  •  “A  long-­‐lived  transacKon  is  a  saga  if  it  can  be  wri8en  as  a  sequence  of  transacKons  that  can  be  interleaved  with  other  transacKons.”  

•  For  some  reason,  Mike  Amundsen  keeps  a  copy  of  the  original  whitepaper  PDF  here:  h8p://www.amundsen.com/downloads/sagas.pdf    

Sagas  

•  Implemented  with  an  implementaKon  of  ISagaEntity,  TEntity  and  deriving  a  message  handler  from  Saga<TEntity>.  

•  All  handled  messages  should  somehow  be  correlated  with  the  sata  data.  

Show  me  the  code  

•  Just  do  it  

Sagas  

•  Use  them  to  –  implement  short  conversaKons  –  implement  long  conversaKons  – handle  Kmeouts  –  implement  idempotency  

Thanks  for  listening!  

mhg@d60.dk  @mookid8000  

h8p://mookid.dk/oncode  

Image  credits  “It’s  the  same  mouth,  just  flipped”:  h8p://humor-­‐image.com/its-­‐the-­‐same-­‐mouth-­‐just-­‐flipped/        Thanks  for  lepng  me  borrow  your  awesome  images  –  if  you  ever  meet  me,  I’ll  buy  you  guys  and  girls  a  beer.  Seriously,  I  will.  

Recommended