protected override void ConfigureInMemoryReceiveEndpoint(IInMemoryReceiveEndpointConfigurator configurator) { base.ConfigureInMemoryReceiveEndpoint(configurator); _sagaRepository = new InMemorySagaRepository <ProvisionUserWithSingleGroupSagaState>(); _saga = new ProvisionUserWithSingleGroupSaga(); configurator.StateMachineSaga(_saga, _sagaRepository); }
private static void RegisterBus(IServiceCollection serviceCollection, IServiceProvider serviceProvider) { var busConfiguration = RabbitMqBusConfiguration.Parse(serviceBusConnectionString); var provisionUserWithSingleGroupSaga = new ProvisionUserWithSingleGroupSaga(); var provisionUserWithMultipleGroupsSaga = new ProvisionUserWithMultipleGroupsSaga(); var provisionUserWithApprovalSaga = new ProvisionUserWithApprovalSaga(); var bus = Bus.Factory.CreateUsingRabbitMq(sbc => { var host = sbc.Host(busConfiguration.ToRabbitMqHostSettings()); sbc.ReceiveEndpoint(host, Constants.SagaPattern.QueueNames.ProvisionUserWithSingleGroupService, configurator => { configurator.UseRetry(retryConfigurator => retryConfigurator.Incremental(3, TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(10))); configurator.StateMachineSaga(provisionUserWithSingleGroupSaga, new MongoDbSagaRepository <ProvisionUserWithSingleGroupSagaState>(mongoDbConnectionString, "SagaToServerless", Constants.CollectionNames.ProvisionUserWithSingleGroupSagas)); }); sbc.ReceiveEndpoint(host, Constants.SagaPattern.QueueNames.ProvisionUserWithMultipleGroupsService, configurator => { configurator.UseRetry(retryConfigurator => retryConfigurator.Incremental(3, TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(10))); configurator.StateMachineSaga(provisionUserWithMultipleGroupsSaga, new MongoDbSagaRepository <ProvisionUserWithMultipleGroupsSagaState>(mongoDbConnectionString, "SagaToServerless", Constants.CollectionNames.ProvisionUserWithMultipleGroupSagas)); }); sbc.ReceiveEndpoint(host, Constants.SagaPattern.QueueNames.ProvisionUserWithApprovalService, configurator => { configurator.UseRetry(retryConfigurator => retryConfigurator.Incremental(3, TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(10))); configurator.StateMachineSaga(provisionUserWithApprovalSaga, new MongoDbSagaRepository <ProvisionUserWithApprovalSagaState>(mongoDbConnectionString, "SagaToServerless", Constants.CollectionNames.ProvisionUserWithApprovalSagas)); }); sbc.ReceiveEndpoint(host, Constants.SagaPattern.QueueNames.UsersHandlerQueue, configurator => { configurator.UseRetry(retryConfigurator => retryConfigurator.Incremental(3, TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(10))); configurator.Consumer(() => new UsersHandler(serviceProvider.GetRequiredService <IUserService>())); }); sbc.ReceiveEndpoint(host, Constants.SagaPattern.QueueNames.GroupsHandlerQueue, configurator => { configurator.UseRetry(retryConfigurator => retryConfigurator.Incremental(3, TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(10))); configurator.Consumer(() => new GroupsHandler(serviceProvider.GetRequiredService <IGroupService>())); }); sbc.ReceiveEndpoint(host, Constants.SagaPattern.QueueNames.NotificationsHandlerQueue, configurator => { configurator.UseRetry(retryConfigurator => retryConfigurator.Incremental(3, TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(10))); configurator.Consumer(() => new NotificationsHandler(serviceProvider.GetRequiredService <ISendGridService>())); }); sbc.ReceiveEndpoint(host, Constants.SagaPattern.QueueNames.ProvisionUserHandlerQueue, configurator => { configurator.UseRetry(retryConfigurator => retryConfigurator.Incremental(3, TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(10))); configurator.Consumer(() => new ProvisionUserHandler()); }); sbc.ReceiveEndpoint(host, Constants.SagaPattern.QueueNames.ApprovalHandlerQueue, configurator => { configurator.UseRetry(retryConfigurator => retryConfigurator.Incremental(3, TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(10))); configurator.Consumer(() => new ApprovalHandler()); }); }); bus.Start(); serviceCollection.AddSingleton <IBus>(bus); serviceCollection.AddSingleton <IBusControl>(bus); serviceProvider = serviceCollection.BuildServiceProvider(); }