コード例 #1
0
        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);
        }
コード例 #2
0
ファイル: Worker.cs プロジェクト: psowinski/saga
        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);
        }
コード例 #3
0
 void NotifyTimeoutManagerThatSagaHasCompleted(Saga.Saga saga)
 {
     MessageDeferrer.ClearDeferredMessages(Headers.SagaId, saga.Entity.Id.ToString());
 }