Esempio n. 1
0
        public static IServiceBus Create(
            Action <IMassInstanceBusFactoryConfigurator> configure,
            IMassInstanceConsumerFactory consumerFactory)
        {
            var topologyConfiguration    = new RabbitMqTopologyConfiguration(MessageTopology);
            var busConfiguration         = new RabbitMqBusConfiguration(topologyConfiguration);
            var busEndpointConfiguration = busConfiguration.CreateEndpointConfiguration();

            var sagaMessageExtractor = new SagaMessageExtractor();

            var configurator = new MassInstanceBusFactoryConfigurator(
                busConfiguration,
                busEndpointConfiguration,
                consumerFactory,
                sagaMessageExtractor);

            configure(configurator);

            var result = BusConfigurationResult.CompileResults(configurator.Validate());

            try
            {
                return(configurator.CreateBus());
            }
            catch (Exception ex)
            {
                throw new ConfigurationException(result, "An exception occurred during bus creation", ex);
            }
        }
        static IBusControl Build(IBusFactory factory, IBusConfiguration busConfiguration, IEnumerable <ValidationResult> validationResult)
        {
            if (LogContext.Current == null)
            {
                LogContext.ConfigureCurrentLogContext();
            }

            busConfiguration.HostConfiguration.LogContext = LogContext.Current;

            var result = BusConfigurationResult.CompileResults(validationResult);

            try
            {
                var busReceiveEndpointConfiguration = factory.CreateBusEndpointConfiguration(x => x.ConfigureConsumeTopology = false);

                var host = busConfiguration.HostConfiguration.Build();

                var bus = new MassTransitBus(host, busConfiguration.BusObservers, busReceiveEndpointConfiguration);

                TaskUtil.Await(() => busConfiguration.BusObservers.PostCreate(bus));

                return(bus);
            }
            catch (Exception ex)
            {
                TaskUtil.Await(() => busConfiguration.BusObservers.CreateFaulted(ex));

                throw new ConfigurationException(result, "An exception occurred during bus creation", ex);
            }
        }
        protected IBusInstance CreateBus <T, TConfigurator>(T configurator, IBusRegistrationContext context,
                                                            Action <IBusRegistrationContext, TConfigurator> configure, IEnumerable <IBusInstanceSpecification> specifications)
            where T : TConfigurator, IBusFactory
            where TConfigurator : IBusFactoryConfigurator
        {
            var loggerFactory = context.GetService <ILoggerFactory>();

            if (loggerFactory != null)
            {
                LogContext.ConfigureCurrentLogContext(loggerFactory);
            }
            else if (LogContext.Current == null)
            {
                LogContext.ConfigureCurrentLogContext();
            }

            _hostConfiguration.LogContext = LogContext.Current;

            context.UseHealthCheck(configurator);

            configure?.Invoke(context, configurator);

            specifications ??= Enumerable.Empty <IBusInstanceSpecification>();

            IEnumerable <IBusInstanceSpecification> busInstanceSpecifications = specifications as IBusInstanceSpecification[] ?? specifications.ToArray();

            IEnumerable <ValidationResult> validationResult = configurator.Validate()
                                                              .Concat(busInstanceSpecifications.SelectMany(x => x.Validate()));

            var result = BusConfigurationResult.CompileResults(validationResult);

            try
            {
                var busReceiveEndpointConfiguration = configurator.CreateBusEndpointConfiguration(x => x.ConfigureConsumeTopology = false);

                var host = _hostConfiguration.Build() as IHost <TEndpointConfigurator>;

                var bus = new MassTransitBus(host, _hostConfiguration.BusConfiguration.BusObservers, busReceiveEndpointConfiguration);

                TaskUtil.Await(() => _hostConfiguration.BusConfiguration.BusObservers.PostCreate(bus));

                IBusInstance instance = CreateBusInstance(bus, host, _hostConfiguration, context);

                foreach (var specification in busInstanceSpecifications)
                {
                    specification.Configure(instance);
                }

                return(instance);
            }
            catch (Exception ex)
            {
                TaskUtil.Await(() => _hostConfiguration.BusConfiguration.BusObservers.CreateFaulted(ex));

                throw new ConfigurationException(result, "An exception occurred during bus creation", ex);
            }
        }
Esempio n. 4
0
        public void CreateReceiveEndpoint(string queueName, Action <IServiceBusReceiveEndpointConfigurator> configure)
        {
            var endpointConfigurator = new ServiceBusReceiveEndpointSpecification(_host, queueName);

            configure?.Invoke(endpointConfigurator);

            BusConfigurationResult.CompileResults(endpointConfigurator.Validate());

            endpointConfigurator.Apply(_builder);
        }
Esempio n. 5
0
        public void CreateReceiveEndpoint(string queueName, Action <IInMemoryReceiveEndpointConfigurator> configure)
        {
            var specification = new InMemoryReceiveEndpointSpecification(queueName);

            configure?.Invoke(specification);

            BusConfigurationResult.CompileResults(specification.Validate());

            specification.Apply(_builder);
        }
        public void CreateReceiveEndpoint(string queueName, Action <IInMemoryReceiveEndpointConfigurator> configure)
        {
            var configuration = _configuration.CreateReceiveEndpointConfiguration(queueName, _configuration.CreateEndpointConfiguration());

            configure?.Invoke(configuration.Configurator);

            BusConfigurationResult.CompileResults(configuration.Validate());

            configuration.Build();
        }
Esempio n. 7
0
        public void CreateReceiveEndpoint(string pathMatch, Action <IHttpReceiveEndpointConfigurator> configure)
        {
            var endpointConfigurator = new HttpReceiveEndpointSpecification(_host, _hosts, pathMatch, _configuration);

            configure?.Invoke(endpointConfigurator);

            BusConfigurationResult.CompileResults(endpointConfigurator.Validate());

            endpointConfigurator.Apply(_builder);
        }
Esempio n. 8
0
        HostReceiveEndpointHandle ConnectSubscriptionEndpoint(IServiceBusSubscriptionEndpointConfiguration configuration)
        {
            LogContext.Debug?.Log("Connect subscription endpoint: {Topic}/{SubscriptionName}", configuration.Settings.Path, configuration.Settings.Name);

            BusConfigurationResult.CompileResults(configuration.Validate());

            configuration.Build(this);

            return(ReceiveEndpoints.Start(configuration.Settings.Path));
        }
Esempio n. 9
0
        HostReceiveEndpointHandle CreateSubscriptionEndpoint(Action <IServiceBusSubscriptionEndpointConfigurator> configure,
                                                             SubscriptionEndpointSettings settings)
        {
            var configuration = _hostConfiguration.CreateSubscriptionEndpointConfiguration(settings);

            configure?.Invoke(configuration.Configurator);

            BusConfigurationResult.CompileResults(configuration.Validate());

            return(_receiveEndpoints.Start(settings.Path));
        }
Esempio n. 10
0
        public void CreateSubscriptionEndpoint(SubscriptionEndpointSettings settings, Action <IServiceBusSubscriptionEndpointConfigurator> configure)
        {
            var consumePipe = _builder.CreateConsumePipe();

            var endpointConfigurator = new ServiceBusSubscriptionEndpointSpecification(_host, settings, consumePipe);

            configure?.Invoke(endpointConfigurator);

            BusConfigurationResult.CompileResults(endpointConfigurator.Validate());

            endpointConfigurator.Apply(_builder);
        }
Esempio n. 11
0
        public void CreateReceiveEndpoint(string queueName, Action <IInMemoryReceiveEndpointConfigurator> configure)
        {
            var endpointConfiguration = _configuration.CreateNewConfiguration();

            var specification = new InMemoryReceiveEndpointSpecification(_builder.InMemoryHost.Address, queueName, _sendTransportProvider, endpointConfiguration);

            configure?.Invoke(specification);

            BusConfigurationResult.CompileResults(specification.Validate());

            specification.Apply(_builder);
        }
Esempio n. 12
0
        public void CreateReceiveEndpoint(string queueName, Action <IRabbitMqReceiveEndpointConfigurator> configure)
        {
            var endpointTopologySpecification = _configuration.CreateNewConfiguration();

            var endpointConfigurator = new RabbitMqReceiveEndpointSpecification(_host, endpointTopologySpecification, queueName);

            configure?.Invoke(endpointConfigurator);

            BusConfigurationResult.CompileResults(endpointConfigurator.Validate());

            endpointConfigurator.Apply(_builder);
        }
        public void CreateReceiveEndpoint(string queueName, Action <IServiceBusReceiveEndpointConfigurator> configure)
        {
            var endpointTopologySpecification = _configuration.CreateNewConfiguration();

            var endpointConfigurator = new ServiceBusReceiveEndpointSpecification(_host, queueName, endpointTopologySpecification, _sendTransportProvider);

            configure?.Invoke(endpointConfigurator);

            BusConfigurationResult.CompileResults(endpointConfigurator.Validate());

            endpointConfigurator.Apply(_builder);
        }
Esempio n. 14
0
        public HostReceiveEndpointHandle ConnectReceiveEndpoint(string queueName, Action <IActiveMqReceiveEndpointConfigurator> configure = null)
        {
            var configuration = _hostConfiguration.CreateReceiveEndpointConfiguration(queueName);

            configure?.Invoke(configuration.Configurator);

            BusConfigurationResult.CompileResults(configuration.Validate());

            configuration.Build();

            return(_receiveEndpoints.Start(queueName));
        }
        public void CreateSubscriptionEndpoint(SubscriptionEndpointSettings settings, Action <IServiceBusSubscriptionEndpointConfigurator> configure)
        {
            var endpointConfiguration = _configuration.CreateNewConfiguration();

            var endpointConfigurator = new ServiceBusSubscriptionEndpointSpecification(_host, settings, endpointConfiguration, _sendTransportProvider);

            configure?.Invoke(endpointConfigurator);

            BusConfigurationResult.CompileResults(endpointConfigurator.Validate());

            endpointConfigurator.Apply(_builder);
        }
Esempio n. 16
0
        public static IBusControl Build(this IBusFactory factory)
        {
            ConfigurationResult result = BusConfigurationResult.CompileResults(factory.Validate());

            try
            {
                return(factory.CreateBus());
            }
            catch (Exception ex)
            {
                throw new ConfigurationException(result, "An exception occurred during bus creation", ex);
            }
        }
        /// <summary>
        /// Adds a Marten saga repository to the registration
        /// </summary>
        /// <param name="configurator"></param>
        /// <param name="connectionString">The Marten configuration string</param>
        /// <typeparam name="T"></typeparam>
        /// <returns></returns>
        public static ISagaRegistrationConfigurator <T> MartenRepository <T>(this ISagaRegistrationConfigurator <T> configurator, string connectionString)
            where T : class, ISaga
        {
            var martenConfigurator = new MartenSagaRepositoryConfigurator <T>();

            martenConfigurator.Connection(connectionString);

            BusConfigurationResult.CompileResults(martenConfigurator.Validate());

            configurator.Repository(x => martenConfigurator.Register(x));

            return(configurator);
        }
Esempio n. 18
0
        /// <summary>
        /// Adds a Azure Table saga repository to the registration
        /// </summary>
        /// <param name="configurator"></param>
        /// <param name="configure"></param>
        /// <typeparam name="T"></typeparam>
        /// <returns></returns>
        public static ISagaRegistrationConfigurator <T> AzureTableRepository <T>(this ISagaRegistrationConfigurator <T> configurator,
                                                                                 Action <IAzureTableSagaRepositoryConfigurator <T> > configure = null)
            where T : class, ISaga
        {
            var sagaRepositoryConfigurator = new AzureTableSagaRepositoryConfigurator <T>();

            configure?.Invoke(sagaRepositoryConfigurator);

            BusConfigurationResult.CompileResults(sagaRepositoryConfigurator.Validate());

            configurator.Repository(x => sagaRepositoryConfigurator.Register(x));

            return(configurator);
        }
        /// <summary>
        /// Adds a Redis saga repository to the registration
        /// </summary>
        /// <param name="configurator"></param>
        /// <param name="configure"></param>
        /// <typeparam name="T"></typeparam>
        /// <returns></returns>
        public static ISagaRegistrationConfigurator <T> RedisRepository <T>(this ISagaRegistrationConfigurator <T> configurator,
                                                                            Action <IRedisSagaRepositoryConfigurator <T> > configure = null)
            where T : class, ISagaVersion
        {
            var redisConfigurator = new RedisSagaRepositoryConfigurator <T>();

            configure?.Invoke(redisConfigurator);

            BusConfigurationResult.CompileResults(redisConfigurator.Validate());

            configurator.Repository(x => redisConfigurator.Register(x));

            return(configurator);
        }
Esempio n. 20
0
        public HostReceiveEndpointHandle ConnectReceiveEndpoint(string queueName, Action <IAmazonSqsReceiveEndpointConfigurator> configure = null)
        {
            LogContext.SetCurrentIfNull(DefaultLogContext);

            var configuration = _hostConfiguration.CreateReceiveEndpointConfiguration(queueName, configure);

            BusConfigurationResult.CompileResults(configuration.Validate());

            TransportLogMessages.ConnectReceiveEndpoint(configuration.InputAddress);

            configuration.Build(this);

            return(ReceiveEndpoints.Start(queueName));
        }
Esempio n. 21
0
        public HostReceiveEndpointHandle ConnectReceiveEndpoint(string queueName, Action <IServiceBusReceiveEndpointConfigurator> configure = null)
        {
            LogContext.SetCurrentIfNull(DefaultLogContext);

            LogContext.Debug?.Log("Connect receive endpoint: {Queue}", queueName);

            var configuration = _hostConfiguration.CreateReceiveEndpointConfiguration(queueName, configure);

            BusConfigurationResult.CompileResults(configuration.Validate());

            configuration.Build(this);

            return(ReceiveEndpoints.Start(configuration.Settings.Path));
        }
Esempio n. 22
0
        /// <summary>
        /// Adds a Marten saga repository to the registration
        /// </summary>
        /// <param name="configurator"></param>
        /// <param name="connectionString">The Marten configuration string</param>
        /// <param name="configureOptions"></param>
        /// <typeparam name="T"></typeparam>
        /// <returns></returns>
        public static ISagaRegistrationConfigurator <T> MartenRepository <T>(this ISagaRegistrationConfigurator <T> configurator, string connectionString,
                                                                             Action <StoreOptions> configureOptions)
            where T : class, ISaga
        {
            var redisConfigurator = new MartenSagaRepositoryConfigurator <T>();

            redisConfigurator.Connection(connectionString, configureOptions);

            BusConfigurationResult.CompileResults(redisConfigurator.Validate());

            configurator.Repository(x => redisConfigurator.Register(x));

            return(configurator);
        }
Esempio n. 23
0
        /// <summary>
        /// Configures the Cosmos Saga Repository
        /// </summary>
        /// <param name="configurator"></param>
        /// <param name="configure"></param>
        /// <typeparam name="TSaga"></typeparam>
        /// <returns></returns>
        public static ISagaRegistrationConfigurator <TSaga> CosmosRepository <TSaga>(this ISagaRegistrationConfigurator <TSaga> configurator,
                                                                                     Action <ICosmosSagaRepositoryConfigurator <TSaga> > configure)
            where TSaga : class, ISaga
        {
            var repositoryConfigurator = new CosmosSagaRepositoryConfigurator <TSaga>();

            configure?.Invoke(repositoryConfigurator);

            BusConfigurationResult.CompileResults(repositoryConfigurator.Validate());

            configurator.Repository(x => repositoryConfigurator.Register(x));

            return(configurator);
        }
        /// <summary>
        /// Adds a EntityFramework saga repository to the registration
        /// </summary>
        /// <param name="configurator"></param>
        /// <param name="configure"></param>
        /// <typeparam name="TSaga"></typeparam>
        /// <returns></returns>
        public static ISagaRegistrationConfigurator <TSaga> EntityFrameworkRepository <TSaga>(this ISagaRegistrationConfigurator <TSaga> configurator,
                                                                                              Action <IEntityFrameworkSagaRepositoryConfigurator <TSaga> > configure)
            where TSaga : class, ISaga
        {
            var entityFrameworkSagaRepositoryConfigurator = new EntityFrameworkSagaRepositoryConfigurator <TSaga>();

            configure?.Invoke(entityFrameworkSagaRepositoryConfigurator);

            BusConfigurationResult.CompileResults(entityFrameworkSagaRepositoryConfigurator.Validate());

            configurator.Repository(x => entityFrameworkSagaRepositoryConfigurator.Register(x));

            return(configurator);
        }
Esempio n. 25
0
        /// <summary>
        /// Adds a Redis saga repository to the registration
        /// </summary>
        /// <param name="configurator"></param>
        /// <param name="connectionString"></param>
        /// <param name="configure"></param>
        /// <typeparam name="T"></typeparam>
        /// <returns></returns>
        public static ISagaRegistrationConfigurator <T> DapperRepository <T>(this ISagaRegistrationConfigurator <T> configurator,
                                                                             string connectionString, Action <IDapperSagaRepositoryConfigurator <T> > configure = null)
            where T : class, ISaga
        {
            var repositoryConfigurator = new DapperSagaRepositoryConfigurator <T>(connectionString);

            configure?.Invoke(repositoryConfigurator);

            BusConfigurationResult.CompileResults(repositoryConfigurator.Validate());

            configurator.Repository(x => repositoryConfigurator.Register(x));

            return(configurator);
        }
        /// <summary>
        /// Adds a MongoDB saga repository to the registration
        /// </summary>
        /// <param name="configurator"></param>
        /// <param name="configure"></param>
        /// <typeparam name="TSaga"></typeparam>
        /// <returns></returns>
        public static ISagaRegistrationConfigurator <TSaga> MongoDbRepository <TSaga>(this ISagaRegistrationConfigurator <TSaga> configurator,
                                                                                      Action <IMongoDbSagaRepositoryConfigurator <TSaga> > configure = null)
            where TSaga : class, ISagaVersion
        {
            var mongoDbConfigurator = new MongoDbSagaRepositoryConfigurator <TSaga>();

            configure?.Invoke(mongoDbConfigurator);

            BusConfigurationResult.CompileResults(mongoDbConfigurator.Validate());

            configurator.Repository(mongoDbConfigurator.Register);

            return(configurator);
        }
        /// <summary>
        /// Adds a Marten saga repository to the registration
        /// </summary>
        /// <param name="configurator"></param>
        /// <param name="connectionFactory"></param>
        /// <param name="configureOptions"></param>
        /// <typeparam name="T"></typeparam>
        /// <returns></returns>
        public static ISagaRegistrationConfigurator <T> MartenRepository <T>(this ISagaRegistrationConfigurator <T> configurator,
                                                                             Func <NpgsqlConnection> connectionFactory, Action <StoreOptions> configureOptions)
            where T : class, ISaga
        {
            var martenConfigurator = new MartenSagaRepositoryConfigurator <T>();

            martenConfigurator.Connection(connectionFactory, configureOptions);

            BusConfigurationResult.CompileResults(martenConfigurator.Validate());

            configurator.Repository(x => martenConfigurator.Register(x));

            return(configurator);
        }
        public void CreateSubscriptionEndpoint(SubscriptionEndpointSettings settings, Action <IServiceBusSubscriptionEndpointConfigurator> configure)
        {
            if (!_configuration.TryGetHost(_host, out var hostConfiguration))
            {
                throw new ConfigurationException("The host was not properly configured");
            }

            var configuration = hostConfiguration.CreateSubscriptionEndpointConfiguration(settings);

            configure?.Invoke(configuration.Configurator);

            BusConfigurationResult.CompileResults(configuration.Validate());

            configuration.Build();
        }
Esempio n. 29
0
        HostReceiveEndpointHandle ConnectSubscriptionEndpoint(SubscriptionEndpointSettings settings,
                                                              Action <IServiceBusSubscriptionEndpointConfigurator> configure)
        {
            LogContext.SetCurrentIfNull(DefaultLogContext);

            LogContext.Debug?.Log("Connect subscription endpoint: {Topic}/{SubscriptionName}", settings.Path, settings.Name);

            var configuration = _hostConfiguration.CreateSubscriptionEndpointConfiguration(settings, configure);

            BusConfigurationResult.CompileResults(configuration.Validate());

            configuration.Build(this);

            return(ReceiveEndpoints.Start(configuration.Settings.Path));
        }
Esempio n. 30
0
        public void CreateReceiveEndpoint(string queueName, Action <IServiceBusReceiveEndpointConfigurator> configure)
        {
            if (!_configuration.TryGetHost(_host, out var hostConfiguration))
            {
                throw new ConfigurationException("The host was not properly configured");
            }

            var configuration = hostConfiguration.CreateReceiveEndpointConfiguration(queueName);

            configure?.Invoke(configuration.Configurator);

            BusConfigurationResult.CompileResults(configuration.Validate());

            configuration.Build();
        }