IContainSagaData TryLoadSagaEntity(Saga.Saga saga, LogicalMessage message) { var sagaType = saga.GetType(); var sagaEntityType = SagaConfigurationCache.GetSagaEntityTypeForSagaType(sagaType); var finders = GetFindersFor(message.MessageType, sagaEntityType); foreach (var finder in finders) { var sagaEntity = UseFinderToFindSaga(finder, message.Instance); if (sagaEntity != null) { return(sagaEntity); } } return(null); }
public Worker(ILogger <Worker> logger, IConfiguration cfg, IHostEnvironment env) { this.logger = logger; var appUrl = cfg.GetValue <string>("AppUrl"); var persistenceUrl = cfg.GetValue <string>("PersistenceUrl"); var isDev = env.IsDevelopment(); this.appClient = new AppClient(appUrl); this.persistence = new PersistenceClient(persistenceUrl, new PaymentEventUpdater()); Func <TEvent, Task <ActionStatus> > Protect <TEvent>(Func <TEvent, Task <ActionStatus> > action) where TEvent : Event => SagaUtil.Protect(action, this.errors); var shopping = new SagaConfiguration("Shopping") .OnEvent(Protect((OrderCheckedOut evn) => appClient.Pay(evn.StreamId, evn.CorrelationId))) .OnEvent(Protect((PaymentRequested evn) => appClient.FinalizePayment(evn.StreamId, evn.CorrelationId, evn.Total, evn.Description))) .OnEvent(Protect((PaymentCompleted evn) => appClient.Dispatch(evn.OrderStreamId, evn.StreamId, evn.CorrelationId))) .EndOnEvent <PaymentCancelled>() .EndOnEvent <OrderDispatched>(); this.saga = new Saga.Saga(shopping, persistence, this.logger); }
void NotifyTimeoutManagerThatSagaHasCompleted(Saga.Saga saga) { MessageDeferrer.ClearDeferredMessages(Headers.SagaId, saga.Entity.Id.ToString()); }