示例#1
0
        protected override void ConfigureInMemoryReceiveEndpoint(IInMemoryReceiveEndpointConfigurator configurator)
        {
            base.ConfigureInMemoryReceiveEndpoint(configurator);

            _sagaRepository = new InMemorySagaRepository <ProvisionUserWithSingleGroupSagaState>();
            _saga           = new ProvisionUserWithSingleGroupSaga();
            configurator.StateMachineSaga(_saga, _sagaRepository);
        }
示例#2
0
        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();
        }