Пример #1
0
 protected override void Configure(SagaConfiguration saga)
 {
     saga.CanStartWith((FakeEvent e) => Guid.Empty);
     saga.CanStartWith((AlternateFakeEvent e) => Guid.Empty);
     saga.CanStartWith((DerivedFakeEvent e) => Guid.Empty);
     saga.CanHandle((Timeout e) => Guid.Empty);
 }
Пример #2
0
 protected override void Configure(SagaConfiguration saga)
 {
     saga.CanStartWith((MoneyTransferSent e) => e.TransferId);
     saga.CanStartWith((MoneyTransferReceived e) => e.TransferId);
     saga.CanHandle((MoneyTransferRefunded e) => e.TransferId);
     saga.CanHandle((MoneyTransferFailed e) => e.TransferId);
     saga.CanHandle((Timeout e) => e.CorrelationId);
 }
            public void EventMarkedAsInitiatingEvent()
            {
                var configuration = new SagaConfiguration(typeof(FakeSaga));

                configuration.CanStartWith((FakeEvent e) => e.Id);

                Assert.True(configuration.GetMetadata().CanStartWith(typeof(FakeEvent)));
            }
            public void ReturnFalseIfSagaCannotStartWithEventType()
            {
                var configuration = new SagaConfiguration(typeof(FakeSaga));

                configuration.CanHandle((FakeHandledEvent e) => e.Id);

                Assert.False(configuration.GetMetadata().CanHandle(typeof(FakeUnhandledEvent)));
            }
Пример #5
0
            public void ReturnTrueIfSagaCanStartWithEventType()
            {
                var configuration = new SagaConfiguration(typeof(FakeSaga));

                configuration.CanStartWith((FakeInitiatingEvent e) => e.Id);

                Assert.True(configuration.GetMetadata().CanStartWith(typeof(FakeInitiatingEvent)));
            }
            public void ReturnTrueIfSagaCanStartWithEventType()
            {
                var configuration = new SagaConfiguration(typeof(FakeSaga));

                configuration.CanStartWith((FakeInitiatingEvent e) => e.Id);

                Assert.True(configuration.GetMetadata().CanStartWith(typeof(FakeInitiatingEvent)));
            }
Пример #7
0
            public void ReturnFalseIfSagaCannotStartWithEventType()
            {
                var configuration = new SagaConfiguration(typeof(FakeSaga));

                configuration.CanHandle((FakeHandledEvent e) => e.Id);

                Assert.False(configuration.GetMetadata().CanHandle(typeof(FakeUnhandledEvent)));
            }
            public void EventMarkedAsInitiatingEvent()
            {
                var configuration = new SagaConfiguration(typeof(FakeSaga));

                configuration.CanHandle((FakeEvent e) => e.Id);

                Assert.True(configuration.GetMetadata().CanHandle(typeof(FakeEvent)));
            }
            public WhenGettingEventCorrelationId()
            {
                var configuration = new SagaConfiguration(typeof(FakeSaga));

                configuration.CanStartWith((FakeInitiatingEvent e) => e.Id);
                configuration.CanHandle((FakeHandledEvent e) => e.Id);

                sagaMetadata = configuration.GetMetadata();
            }
Пример #10
0
            public WhenGettingEventCorrelationId()
            {
                var configuration = new SagaConfiguration(typeof(FakeSaga));

                configuration.CanStartWith((FakeInitiatingEvent e) => e.Id);
                configuration.CanHandle((FakeHandledEvent e) => e.Id);

                sagaMetadata = configuration.GetMetadata();
            }
 protected override IContainerConfiguration CreateConfiguration()
 {
     return(new CustomContainerConfiguration(
                c => base.CreateConfiguration().Register(c),
                c => c.Register(SagaConfiguration.Instance <SoftwareProgrammingSaga,
                                                            SoftwareProgrammingSagaData,
                                                            SoftwareProgrammingSagaFactory,
                                                            GotTiredEvent,
                                                            SleptWellEvent>(SoftwareProgrammingSaga.Descriptor,
                                                                            () => new SnapshotsPersistencePolicy(TimeSpan.FromSeconds(10), 2)))));
 }
            public void CanRegisterEventTypeOnlyOnce()
            {
                var configuration = new SagaConfiguration(typeof(FakeSaga));

                configuration.CanStartWith((FakeEvent e) => e.Id);

                Assert.Equal(
                    Exceptions.EventTypeAlreadyConfigured.FormatWith(typeof(FakeSaga), typeof(FakeEvent)),
                    Assert.Throws <ArgumentException>(() => configuration.CanHandle((FakeEvent e) => e.Id)).Message
                    );
            }
            public void CanRegisterEventTypeOnlyOnce()
            {
                var configuration = new SagaConfiguration(typeof(FakeSaga));

                configuration.CanStartWith((FakeEvent e) => e.Id);

                Assert.Equal(
                    Exceptions.EventTypeAlreadyConfigured.FormatWith(typeof(FakeSaga), typeof(FakeEvent)),
                    Assert.Throws<ArgumentException>(() => configuration.CanHandle((FakeEvent e) => e.Id)).Message
                );
            }
Пример #14
0
 protected override IContainerConfiguration CreateConfiguration()
 {
     return(new CustomContainerConfiguration(
                base.CreateConfiguration(),
                SagaConfiguration.State <SoftwareProgrammingSaga,
                                         SoftwareProgrammingSagaState,
                                         SoftwareProgrammingSagaFactory,
                                         GotTiredEvent>
                    (SoftwareProgrammingSaga.Descriptor,
                    () => new SnapshotsPersistencePolicy(TimeSpan.FromSeconds(10), 2, 3),
                    SoftwareProgrammingSagaState.FromSnapshot)));
 }
Пример #15
0
        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);
        }
 protected override void Configure(SagaConfiguration saga)
 {
     saga.CanHandle((FakeEvent e) => e.Id);
 }
Пример #17
0
        /// <summary>
        /// Gets the saga metadata for this saga instance.
        /// </summary>
        /// <remarks>Called once during saga discovery.</remarks>
        internal SagaMetadata GetMetadata()
        {
            Type sagaType = GetType();
            SagaMetadata sagaMetadata;

            if (!SagaMetadataCache.TryGetValue(sagaType, out sagaMetadata))
            {
                var configuration = new SagaConfiguration(GetType());

                Configure(configuration);
                SagaMetadataCache[sagaType] = sagaMetadata = configuration.GetMetadata();
            }

            return sagaMetadata;
        }
Пример #18
0
 /// <summary>
 /// Configure the saga event handling for this saga type.
 /// </summary>
 /// <param name="saga">The saga configuration instance used to collect saga metadata.</param>
 protected abstract void Configure(SagaConfiguration saga);
 protected override void Configure(SagaConfiguration saga)
 {
     saga.CanStartWith(((FakeInitiatingEvent e) => e.Id));
     saga.CanHandle(((FakeHandledEvent e) => e.Id));
 }
Пример #20
0
 protected override void Configure(SagaConfiguration saga)
 {
     saga.CanStartWith(((FakeInitiatingEvent e) => e.Id));
     saga.CanHandle(((FakeHandledEvent e) => e.Id));
 }
 protected override void Configure(SagaConfiguration saga)
 {
     saga.CanStartWith((FakeEvent e) => e.Id);
     saga.CanHandle((Timeout e) => e.CorrelationId);
 }
 protected override void Configure(SagaConfiguration saga)
 {
     saga.CanStartWith((MoneyTransferSent e) => e.TransferId);
     saga.CanStartWith((MoneyTransferReceived e) => e.TransferId);
     saga.CanHandle((MoneyTransferRefunded e) => e.TransferId);
     saga.CanHandle((MoneyTransferFailed e) => e.TransferId);
     saga.CanHandle((Timeout e) => e.CorrelationId);
 }
 protected override void Configure(SagaConfiguration saga)
 {
     saga.CanStartWith((FakeEvent e) => e.Id);
 }
Пример #24
0
 protected override void Configure(SagaConfiguration saga)
 {
     saga.CanHandle((FakeEvent e) => e.Id);
 }
            public void ResolverCannotBeNull()
            {
                var configuration = new SagaConfiguration(typeof(FakeSaga));

                Assert.Throws<ArgumentNullException>(() => configuration.CanHandle(default(Func<FakeEvent, Guid>)));
            }
 protected override void Configure(SagaConfiguration saga)
 {
     saga.CanStartWith((FakeEvent e) => Guid.Empty);
     saga.CanStartWith((AlternateFakeEvent e) => Guid.Empty);
     saga.CanStartWith((DerivedFakeEvent e) => Guid.Empty);
     saga.CanHandle((Timeout e) => Guid.Empty);
 }
 protected override void Configure(SagaConfiguration saga)
 {
 }
Пример #28
0
 protected override void Configure(SagaConfiguration saga)
 {
 }
Пример #29
0
 protected override void Configure(SagaConfiguration saga)
 {
     saga.CanStartWith((FakeEvent e) => e.Id);
     saga.CanHandle((Timeout e) => e.CorrelationId);
 }
Пример #30
0
 protected override void Configure(SagaConfiguration saga)
 {
     saga.CanStartWith((FakeEvent e) => e.Id);
 }
            public void ResolverCannotBeNull()
            {
                var configuration = new SagaConfiguration(typeof(FakeSaga));

                Assert.Throws <ArgumentNullException>(() => configuration.CanHandle(default(Func <FakeEvent, Guid>)));
            }