/// <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)); }
///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); }
public static RebusSagasConfigurer WithDeferredLocking( this RebusSagasConfigurer configurer, Func <Exception, bool> sagaLockedExceptionFilter ) { configurer.Backbone.StoreSagaData = new MessageDeferringSagaPersister(configurer.Backbone.StoreSagaData, sagaLockedExceptionFilter); return(configurer); }
/// <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); }
/// <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); }
/// <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)); }
/// <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); }
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); }
public static RebusSagasConfigurer WithIdempotentSagas(this RebusSagasConfigurer configurer) { var manager = new IdempotentSagasManager(configurer.Backbone); return(configurer); }