Since routing slip is entirely on the network - how would have someone implemented an actual real waiver signing workflow here ? if suppose the user has to go and sign on an external service. And upon providing a waiver “EventSigned” message is received on the bus - how will this message find its way to the specific routing slip it belongs to ? I would have done it in naive way where I would have two routing slips triggered by my Saga - PreSigningRouting slip which contains all the activities that can be executed without the waiver and PostSigningRoutingSlip which gets triggered when Saga state changes to “WaiverSigned” upon receiving “EventSigned” message from the external service. But this sounds very rigid and does not benefit from dynamic routing slip feature you explained here.
The waiver activity likely should add a WaiverId or something returned from the signing service indicating that the waiver was assigned to the participant. It isn't going to wait for it, it's just triggering the external provider to get a signature. And this is reality. If the participant shows up on race day without a signed waiver, they can literally sign on-site and go race - happens all the time. The waiver service likely has a webhook that could call back to this application and notify the registration that the waiver was actually signed. I just didn't add that to the demo. Because it's a demo.
@@PhatBoyG Probably waiver is bad example here. Generally speaking, can an activity wait for a particular message like IConsumer does ? And if it can, how does the message reach the specific activity instance ? do I persist the routing slip Guid somewhere and upon receiving a relevant message, correlate it with Guid and publish to the endpoint address generated from the combination of ActivityName and the Routing Slip Guid persisted earlier ?
@@AvineshSinghSaab no, activities are not meant to wait for things. Routing slips are designed to complete or fault within a given period of time without relying on externally generated events. If you need to wait for events, use a saga.
Great library and great video!! One question: does the UseDelayedRedelivery change the MessageId?
Thanks!
It doesn't by default, you can configure it to generate a new one for transports like Azure that allow MessageId deduplication.
Since routing slip is entirely on the network - how would have someone implemented an actual real waiver signing workflow here ?
if suppose the user has to go and sign on an external service. And upon providing a waiver “EventSigned” message is received on the bus - how will this message find its way to the specific routing slip it belongs to ? I would have done it in naive way where I would have two routing slips triggered by my Saga - PreSigningRouting slip which contains all the activities that can be executed without the waiver and PostSigningRoutingSlip which gets triggered when Saga state changes to “WaiverSigned” upon receiving “EventSigned” message from the external service. But this sounds very rigid and does not benefit from dynamic routing slip feature you explained here.
The waiver activity likely should add a WaiverId or something returned from the signing service indicating that the waiver was assigned to the participant. It isn't going to wait for it, it's just triggering the external provider to get a signature.
And this is reality. If the participant shows up on race day without a signed waiver, they can literally sign on-site and go race - happens all the time.
The waiver service likely has a webhook that could call back to this application and notify the registration that the waiver was actually signed. I just didn't add that to the demo. Because it's a demo.
@@PhatBoyG Probably waiver is bad example here. Generally speaking, can an activity wait for a particular message like IConsumer does ? And if it can, how does the message reach the specific activity instance ? do I persist the routing slip Guid somewhere and upon receiving a relevant message, correlate it with Guid and publish to the endpoint address generated from the combination of ActivityName and the Routing Slip Guid persisted earlier ?
@@AvineshSinghSaab no, activities are not meant to wait for things. Routing slips are designed to complete or fault within a given period of time without relying on externally generated events. If you need to wait for events, use a saga.