public async Task Send(SagaConsumeContext <TSaga, TMessage> context)
            {
                var instance = context.Saga;

                if (_logger.IsDebugEnabled)
                {
                    _logger.DebugFormat("SAGA: {0}:{1} Added {2}", TypeMetadataCache <TSaga> .ShortName,
                                        instance.CorrelationId,
                                        TypeMetadataCache <TMessage> .ShortName);
                }

                SagaConsumeContext <TSaga, TMessage> proxy =
                    new EventStoreSagaConsumeContext <TSaga, TMessage>(_connection, context, instance);

                await _next.Send(proxy).ConfigureAwait(false);

                if (!proxy.IsCompleted)
                {
                    await _connection.SaveEvents(
                        instance.StreamName,
                        instance.GetChanges(),
                        instance.ExpectedVersion,
                        new EventMetadata { CorrelationId = instance.CorrelationId, CausationId = context.MessageId });
                }
            }
Esempio n. 2
0
        async Task SendToInstance <T>(
            ConsumeContext <T> context, ISagaPolicy <TSaga, T> policy,
            IPipe <SagaConsumeContext <TSaga, T> > next, TSaga instance
            )
            where T : class
        {
            try
            {
                var sagaConsumeContext = new EventStoreSagaConsumeContext <TSaga, T>(_connection, context, instance);

                sagaConsumeContext.LogUsed();

                await policy.Existing(sagaConsumeContext, next).ConfigureAwait(false);

                if (!sagaConsumeContext.IsCompleted)
                {
                    await _connection.PersistSagaInstance(instance, context, _getEventMetadata);
                }
            }
            catch (SagaException)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new SagaException(ex.Message, typeof(TSaga), typeof(T), instance.CorrelationId, ex);
            }
        }
        async Task SendToInstance <T>(ConsumeContext <T> context, ISagaPolicy <TSaga, T> policy,
                                      IPipe <SagaConsumeContext <TSaga, T> > next, TSaga instance)
            where T : class
        {
            try
            {
                if (Log.IsDebugEnabled)
                {
                    Log.DebugFormat("SAGA:{0}:{1} Used {2}", TypeMetadataCache <TSaga> .ShortName,
                                    instance.CorrelationId, TypeMetadataCache <T> .ShortName);
                }

                var sagaConsumeContext = new EventStoreSagaConsumeContext <TSaga, T>(_connection, context, instance);

                await policy.Existing(sagaConsumeContext, next).ConfigureAwait(false);

                if (!sagaConsumeContext.IsCompleted)
                {
                    await _connection.SaveEvents(instance.StreamName, instance.GetChanges(), instance.ExpectedVersion);
                }
            }
            catch (SagaException)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new SagaException(ex.Message, typeof(TSaga), typeof(T), instance.CorrelationId, ex);
            }
        }
Esempio n. 4
0
            public async Task Send(SagaConsumeContext <TSaga, TMessage> context)
            {
                var instance = context.Saga;

                SagaConsumeContext <TSaga, TMessage> proxy =
                    new EventStoreSagaConsumeContext <TSaga, TMessage>(_connection, context, instance);

                proxy.LogAdded();

                await _next.Send(proxy).ConfigureAwait(false);

                if (!proxy.IsCompleted)
                {
                    await _connection.PersistSagaInstance(instance, context, _metadataFactory).ConfigureAwait(false);
                }
            }