nservicebus - Nservice bus saga ordering -


i have 2 saga's namely client saga , client billing saga.

 public class clientsagastate:icontainsagadata     {         #region nservicebus         public guid id { get; set; }         public string originator { get; set; }         public string originalmessageid { get; set; }         #endregion          public guid clientref { get; set; }          public clientmessage clientchangemessage { get; set; }          public clientcontactchangemessage clientcontactchange { get; set; }       }        public class clientbillingsagastate:icontainsagadata     {         #region nservicebus         public guid id { get; set; }         public string originator { get; set; }         public string originalmessageid { get; set; }         #endregion          public guid clientref { get; set; }          public guid funderref { get; set; }          public guid clientbillingref { get; set; }          public clientbillingmessage clientbillingmessage { get; set; }       }       public  class clientsaga:saga<clientsagastate>,      iamstartedbymessages<clientchangemessage>,        iamstartedbymessages<clientcontactchangemessage>    {      public override void configurehowtofindsaga()        {             configuremapping<clientchangemessage>(s => s.clientref, m => m.entityref);            configuremapping<clientcontactchangemessage>(s => s.clientref, m => m.primaryentityref);        }      public void handle(serviceuserchangemessage message)        {             if (busreftranslator.getlocalref(entitytranslationnames.clientchange, message.entityref.value) != null)            {                 gethandler<clientchangemessage>().handle(message);                completethesaga();                return;            }            handleserviceuserchangeanddependencies(message);            //markascomplete();            completethesaga();        }     }      public class clientbillingsaga:saga<clientbillingsagastate>         ,ihandlemessages<clientchangemessage>,         iamstartedbymessages<clientbillingmessage>,         ihandlemessages<funderchangemessage>     {          public override void configurehowtofindsaga()         {              configuremapping<clientchangemessage>(s => s.clientref, m => m.entityref);             configuremapping<funderchangemessage>(s => s.funderref, m => m.entityref);             configuremapping<clientbillingmessage>(s => s.clientbillingref, m => m.primaryentityref);          }           public void handle(clientchangemessage message)         {             var state = this.data;             if (state.clientbillingmessage != null)             {                 handle(state.clientbillingmessage);             }         }            public void handle(caresysinvoicelineinsertmessage message)           {                  //first check funder                  //if funder not there store message in saga                  //if funder there check client                 //if client not there put message in saga                  // if funder , client there execute message delete saga           }       } 

here scenario:

1)if receive clientbillingmessage client , funder not there , store message in saga.

2)if funder message comes gets executed , saga still persists waiting client message

3)now if client message comes runs clientbillingsaga's client message handler first hence existing clientbillingsaga still persists , after goes , executes handler inside clientsaga client message.

my question: there way can order execution of these 2 saga. found ispecifymessagehandlerordering interface deals handling of messages don't think can use saga.

sagas meant synchronising events on time.

you can collect data need form messages handled in saga state , once you have handled proceed send command/publish event business logic processed handler.

note: actual work (business logic , domain data manipulation) should done in separate handler (to comply srp , unit of work).

hope helps


Comments

Popular posts from this blog

How to remove text and logo OR add Overflow on Android ActionBar using AppCompat on API 8? -

html - How to style widget with post count different than without post count -

url rewriting - How to redirect a http POST with urlrewritefilter -