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) { 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))); }
public void ReturnTrueIfSagaCanStartWithEventType() { var configuration = new SagaConfiguration(typeof(FakeSaga)); configuration.CanStartWith((FakeInitiatingEvent e) => e.Id); Assert.True(configuration.GetMetadata().CanStartWith(typeof(FakeInitiatingEvent))); }
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(); }
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 ); }
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))); }
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); }
/// <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; }
/// <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)); }
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((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) { }
public void ResolverCannotBeNull() { var configuration = new SagaConfiguration(typeof(FakeSaga)); Assert.Throws <ArgumentNullException>(() => configuration.CanHandle(default(Func <FakeEvent, Guid>))); }