Esempio n. 1
0
        /// <summary>
        /// Configures Rebus to store saga data in MongoDB, in the database specified by the connection string
        /// </summary>
        public static MongoDbSagaPersisterConfigurationBuilder StoreInMongoDb(this RebusSagasConfigurer configurer, string connectionString)
        {
            var persister = new MongoDbSagaPersister(connectionString);

            configurer.Use(persister);
            return(new MongoDbSagaPersisterConfigurationBuilder(persister));
        }
Esempio n. 2
0
///XXX: Added by mistake. Needs to be well implemented to be useful
#if false
        /// <summary>
        /// Extension to allow saga locking while handling messages.
        /// </summary>
        /// <param name="configurer">The own RebusSagaConfigurer instance</param>
        /// <param name="provider">ISagaLockingProvider instance implementation</param>
        /// <param name="timeout">Nullable Timespan to allow lock retry until TimeOut reached</param>
        /// <returns>The own RebusSagaConfigurer Instance</returns>
        public static RebusSagasConfigurer WithSagaLocking(this RebusSagasConfigurer configurer, ISagaLockingProvider provider
                                                           , TimeSpan?timeout = null)
        {
            var manager = new SagaLockingManager(configurer.Backbone, provider, timeout);

            return(configurer);
        }
Esempio n. 3
0
 public static RebusSagasConfigurer WithDeferredLocking(
     this RebusSagasConfigurer configurer,
     Func <Exception, bool> sagaLockedExceptionFilter
     )
 {
     configurer.Backbone.StoreSagaData = new MessageDeferringSagaPersister(configurer.Backbone.StoreSagaData, sagaLockedExceptionFilter);
     return(configurer);
 }
Esempio n. 4
0
        /// <summary>
        /// Configures Rebus to store sagas in PostgreSQL.
        /// </summary>
        public static PostgreSqlSagaPersisterFluentConfigurer StoreInPostgreSql(this RebusSagasConfigurer configurer, string connectionString, string sagaTable, string sagaIndexTable)
        {
            var persister = new PostgreSqlSagaPersister(connectionString, sagaTable, sagaIndexTable);

            configurer.Use(persister);

            return(new PostgreSqlSagaPersisterFluentConfigurer(persister));
        }
        public static RebusSagasConfigurer WithSagaWithCreatedOn(this RebusSagasConfigurer configurer)
        {
            var container = GetContainer(configurer.Backbone.ActivateHandlers);

            container.Register(Component.For <SagaWithCreatedOnInterceptor>());
            container.Register(Component.For <SagaWithCreatedOnHandlerProxyGenerationHook>());

            return(configurer);
        }
Esempio n. 6
0
        /// <summary>
        /// Configures Rebus to store sagas in AdoNet.
        /// </summary>
        public static AdoNetSagaPersisterFluentConfigurer StoreInAdoNet(this RebusSagasConfigurer configurer, string connectionStringName, string sagaTable, string sagaIndexTable)
        {
            var connString = GetConnectionString(connectionStringName);
            var factory    = new AdoNetConnectionFactory(connString.ConnectionString, connString.ProviderName);
            var manager    = new AdoNetUnitOfWorkManager(factory);

            configurer.Backbone.ConfigureEvents(x => x.AddUnitOfWorkManager(manager));
            var persister = new AdoNetSagaPersister(manager, sagaTable, sagaIndexTable);

            configurer.Use(persister);

            return(persister);
        }
Esempio n. 7
0
        /// <summary>
        /// Store sagas using two IStoreSagaDatas.
        /// </summary>
        /// <param name="configurer">SagasConfigurer to use DualSagaPersister in</param>
        /// <param name="oldStoreSagaData">Sagas are found in this IStoreSagaData and updated.</param>
        /// <param name="newStoreSagaData">Sagas are found in this IStoreSagaData and updated, as well as inserted.</param>
        public static void StoreInDualPersister(this RebusSagasConfigurer configurer, Action <RebusSagasConfigurer> oldStoreSagaData, Action <RebusSagasConfigurer> newStoreSagaData)
        {
            var backbone1   = new ConfigurationBackbone((IContainerAdapter)configurer.Backbone.ActivateHandlers);
            var configurer1 = RebusSagasConfigurerFactory(backbone1);

            oldStoreSagaData(configurer1);

            var backbone2   = new ConfigurationBackbone((IContainerAdapter)configurer.Backbone.ActivateHandlers);
            var configurer2 = RebusSagasConfigurerFactory(backbone2);

            newStoreSagaData(configurer2);

            configurer.Use(new DualSagaPersister(configurer1.Backbone.StoreSagaData, configurer2.Backbone.StoreSagaData));
        }
Esempio n. 8
0
        /// <summary>
        /// Configures Rebus to store sagas in AdoNet.
        /// </summary>
        public static AdoNetSagaPersisterFluentConfigurer StoreInAdoNet(this RebusSagasConfigurer configurer, string connectionStringName, string sagaTable, string sagaIndexTable, UOWCreatorDelegate unitOfWorkCreator = null)
        {
            if (unitOfWorkCreator == null)
            {
                unitOfWorkCreator = (fact, cont) => new AdoNetUnitOfWork(fact, cont);
            }

            var connString = GetConnectionString(connectionStringName);
            var factory    = new AdoNetConnectionFactory(connString.ConnectionString, connString.ProviderName);
            var manager    = new AdoNetUnitOfWorkManager(factory, unitOfWorkCreator);

            configurer.Backbone.ConfigureEvents(x => x.AddUnitOfWorkManager(manager));
            var persister = new AdoNetSagaPersister(manager, sagaTable, sagaIndexTable);

            configurer.Use(persister);

            return(persister);
        }
Esempio n. 9
0
        public static RebusSagasConfigurer WithDeferredLocking(
            this RebusSagasConfigurer configurer,
            TimeSpan lockedSagasDeferInterval,
            Func <Exception, bool> sagaLockedExceptionFilter
            )
        {
            var container = GetContainer(configurer.Backbone.ActivateHandlers);

            container.Register(
                Component.For <MessageDeferringSagaInterceptor>(),
                Component.For <MessageDeferringSagaSettings>().Instance(
                    new MessageDeferringSagaSettings()
            {
                LockedSagasDeferInterval = lockedSagasDeferInterval
            })
                );

            // When Deferring of messages targeting locked sagas is enabled
            // we need to register a SagaPersister wrapper in order to handle
            // saga-locked exceptions and convert them to fake-sagadata objects.
            configurer.Backbone.StoreSagaData = new MessageDeferringSagaPersister(configurer.Backbone.StoreSagaData, sagaLockedExceptionFilter);

            return(configurer);
        }
Esempio n. 10
0
        public static RebusSagasConfigurer WithIdempotentSagas(this RebusSagasConfigurer configurer)
        {
            var manager = new IdempotentSagasManager(configurer.Backbone);

            return(configurer);
        }