public OutboxMessageProcessorTests()
 {
     _transport       = Substitute.For <ITransport>();
     _outboxStorage   = Substitute.For <IOutboxStorage>();
     _backoffStrategy = Substitute.For <IBackoffStrategy>();
     _busDisposalCancellationTokenSource = new CancellationTokenSource();
     _processor = new OutboxMessagesProcessor(TopMessagesToRetrieve, _transport, _outboxStorage,
                                              _backoffStrategy, new NullLoggerFactory(), _busDisposalCancellationTokenSource.Token);
 }
 public OutboxMessagesProcessor(int topMessagesToRetrieve, ITransport transport, IOutboxStorage outboxStorage, IBackoffStrategy backoffStrategy, IRebusLoggerFactory rebusLoggerFactory, CancellationToken busDisposalCancellationToken)
 {
     _topMessagesToRetrieve        = topMessagesToRetrieve;
     _transport                    = transport;
     _outboxStorage                = outboxStorage;
     _backoffStrategy              = backoffStrategy;
     _busDisposalCancellationToken = busDisposalCancellationToken;
     _log = rebusLoggerFactory.GetLogger <OutboxMessagesProcessor>();
 }
        public Task Configure(CancellationToken cancellationToken = default)
        {
            SagaIdGenerator            = new DefaultSagaIdGenerator();
            SagaStorage                = new NonDurableSagaPersister();
            SynchronizedStorage        = new NonDurableSynchronizedStorage();
            SynchronizedStorageAdapter = new NonDurableTransactionalSynchronizedStorageAdapter();
            OutboxStorage              = new NonDurableOutboxStorage();

            return(Task.CompletedTask);
        }
示例#4
0
        public Task Configure()
        {
            SagaIdGenerator            = new DefaultSagaIdGenerator();
            SagaStorage                = new InMemorySagaPersister();
            SynchronizedStorage        = new InMemorySynchronizedStorage();
            SynchronizedStorageAdapter = new InMemoryTransactionalSynchronizedStorageAdapter();
            OutboxStorage              = new InMemoryOutboxStorage();

            return(Task.CompletedTask);
        }
示例#5
0
        public async Task Configure(CancellationToken cancellationToken = default)
        {
            var containerConnectionString = Environment.GetEnvironmentVariable("NServiceBusStorageMongoDB_ConnectionString");

            client = string.IsNullOrWhiteSpace(containerConnectionString) ? new MongoClient() : new MongoClient(containerConnectionString);

            Storage.MongoDB.SagaStorage.InitializeSagaDataTypes(client, databaseName, MongoPersistence.DefaultCollectionNamingConvention, SagaMetadataCollection);
            SagaStorage         = new SagaPersister(SagaPersister.DefaultVersionElementName);
            SynchronizedStorage = new StorageSessionFactory(client, true, databaseName, MongoPersistence.DefaultCollectionNamingConvention, SessionTimeout ?? MongoPersistence.DefaultTransactionTimeout);

            var databaseSettings = new MongoDatabaseSettings
            {
                ReadConcern    = ReadConcern.Majority,
                ReadPreference = ReadPreference.Primary,
                WriteConcern   = WriteConcern.WMajority
            };
            var database = client.GetDatabase(databaseName, databaseSettings);
            await database.CreateCollectionAsync(MongoPersistence.DefaultCollectionNamingConvention(typeof(OutboxRecord)), cancellationToken : cancellationToken);

            OutboxStorage = new OutboxPersister(client, databaseName, MongoPersistence.DefaultCollectionNamingConvention);
        }
        public Task Configure(CancellationToken cancellationToken = default)
        {
            GetContextBagForOutbox = GetContextBagForSagaStorage = () =>
            {
                var context = new ContextBag();
                context.Set(new IncomingMessage("native id", new Dictionary <string, string>(), new byte[0]));
                return(context);
            };

            SagaIdGenerator = new DefaultSagaIdGenerator();
            var sagaPersistenceConfiguration = Variant.Values[0] as SagaPersistenceConfiguration;

            SupportsPessimisticConcurrency = sagaPersistenceConfiguration.EnablePessimisticLocking;
            if (SessionTimeout.HasValue)
            {
                sagaPersistenceConfiguration.SetPessimisticLeaseLockAcquisitionTimeout(SessionTimeout.Value);
            }
            SagaStorage = new SagaPersister(sagaPersistenceConfiguration);

            var dbName = Guid.NewGuid().ToString();
            var urls   = Environment.GetEnvironmentVariable("CommaSeparatedRavenClusterUrls") ?? "http://localhost:8080";

            documentStore = new DocumentStore
            {
                Urls     = urls.Split(','),
                Database = dbName
            };
            documentStore.Initialize();
            var dbRecord = new DatabaseRecord(dbName);

            documentStore.Maintenance.Server.Send(new CreateDatabaseOperation(dbRecord));

            IOpenTenantAwareRavenSessions sessionCreator = new OpenRavenSessionByDatabaseName(new DocumentStoreWrapper(documentStore));

            SynchronizedStorage        = new RavenDBSynchronizedStorage(sessionCreator, null);
            SynchronizedStorageAdapter = new RavenDBSynchronizedStorageAdapter(null);

            OutboxStorage = new OutboxPersister(documentStore.Database, sessionCreator, RavenDbOutboxStorage.DeduplicationDataTTLDefault);
            return(Task.CompletedTask);
        }
        public async Task Configure(CancellationToken cancellationToken = default)
        {
            var statefulService = (StatefulService)TestContext.CurrentContext.Test.Properties.Get("StatefulService");

            stateManager = statefulService.StateManager;

            var timeout = SessionTimeout ?? TimeSpan.FromSeconds(4);

            SynchronizedStorage        = new SynchronizedStorage(stateManager, timeout);
            SynchronizedStorageAdapter = new SynchronizedStorageAdapter();

            var sagaInfoCache = new SagaInfoCache();

            sagaInfoCache.Initialize(SagaMetadataCollection);
            SagaStorage = new SagaPersister(sagaInfoCache);

            var sagaIdGenerator = new SagaIdGenerator();

            sagaIdGenerator.Initialize(sagaInfoCache);
            SagaIdGenerator = sagaIdGenerator;

            OutboxStorage = new OutboxStorage(statefulService.StateManager, timeout);
            await stateManager.RegisterOutboxStorage((OutboxStorage)OutboxStorage, cancellationToken).ConfigureAwait(false);
        }
 public TransportReceiveToPhysicalMessageProcessingConnector(IOutboxStorage outboxStorage)
 {
     this.outboxStorage = outboxStorage;
 }
 public OutboxTransportDecorator(ITransport transport, IOutboxStorage outboxStorage)
 {
     _transport     = transport;
     _outboxStorage = outboxStorage;
 }
示例#10
0
 public OutboxTransportDecoratorTests()
 {
     _transport     = Substitute.For <ITransport>();
     _outboxStorage = Substitute.For <IOutboxStorage>();
     _decorator     = new OutboxTransportDecorator(_transport, _outboxStorage);
 }
        public Task Configure(CancellationToken cancellationToken = default)
        {
            var variant           = (SqlTestVariant)Variant.Values[0];
            var dialect           = variant.Dialect;
            var buildDialect      = variant.BuildDialect;
            var connectionFactory = variant.ConnectionFactory;
            var pessimisticMode   = variant.UsePessimisticMode;

            if (SessionTimeout.HasValue)
            {
                dialect = new TimeoutSettingDialect(dialect, (int)SessionTimeout.Value.TotalSeconds);
            }

            var infoCache = new SagaInfoCache(
                null,
                Serializer.JsonSerializer,
                reader => new JsonTextReader(reader),
                writer => new JsonTextWriter(writer),
                "PersistenceTests_",
                dialect,
                SagaMetadataCollection,
                name => ShortenSagaName(name));

            var connectionManager = new ConnectionManager(connectionFactory);

            SagaIdGenerator                = new DefaultSagaIdGenerator();
            SagaStorage                    = new SagaPersister(infoCache, dialect);
            SynchronizedStorage            = new SynchronizedStorage(connectionManager, infoCache, null);
            SynchronizedStorageAdapter     = new StorageAdapter(connectionManager, infoCache, dialect, null);
            OutboxStorage                  = CreateOutboxPersister(connectionManager, dialect, false, false);
            SupportsPessimisticConcurrency = pessimisticMode;

            GetContextBagForSagaStorage = () =>
            {
                var contextBag = new ContextBag();
                contextBag.Set(new IncomingMessage("MessageId", new Dictionary <string, string>(), new byte[0]));
                return(contextBag);
            };

            GetContextBagForOutbox = () =>
            {
                var contextBag = new ContextBag();
                contextBag.Set(new IncomingMessage("MessageId", new Dictionary <string, string>(), new byte[0]));
                return(contextBag);
            };

            using (var connection = connectionFactory())
            {
                connection.Open();

                foreach (var saga in SagaMetadataCollection)
                {
                    CorrelationProperty correlationProperty = null;
                    if (saga.TryGetCorrelationProperty(out var propertyMetadata))
                    {
                        correlationProperty = new CorrelationProperty(propertyMetadata.Name, CorrelationPropertyType.String);
                    }

                    var tableName  = ShortenSagaName(saga.SagaType.Name);
                    var definition = new SagaDefinition(tableName, saga.EntityName, correlationProperty);

                    connection.ExecuteCommand(SagaScriptBuilder.BuildDropScript(definition, buildDialect), "PersistenceTests");
                    connection.ExecuteCommand(SagaScriptBuilder.BuildCreateScript(definition, buildDialect), "PersistenceTests");
                }

                connection.ExecuteCommand(OutboxScriptBuilder.BuildDropScript(buildDialect), "PersistenceTests");
                connection.ExecuteCommand(OutboxScriptBuilder.BuildCreateScript(buildDialect), "PersistenceTests");
            }
            return(Task.CompletedTask);
        }
 public OutboxClientTransportDecorator(ITransport transport, IOutboxStorage outboxStorage)
 {
     _transport     = transport ?? throw new ArgumentNullException(nameof(transport));
     _outboxStorage = outboxStorage ?? throw new ArgumentNullException(nameof(outboxStorage));
 }