private static void ConfigureBus( this IServiceCollectionBusConfigurator busConfigurator, string?queueName, MessagingOptions options) { if (options.Transport == MessagingTransport.InMemory) { busConfigurator.AddBus(provider => Bus.Factory.CreateUsingInMemory(cfg => { cfg.ReceiveEndpoint(e => { e.ConfigureConsumers(provider); }); })); } else { busConfigurator.AddBus(provider => Bus.Factory.CreateUsingRabbitMq(cfg => { cfg.Host(options.ServiceBus.Host, c => { c.Username(options.ServiceBus.Username); c.Password(options.ServiceBus.Password); }); cfg.ReceiveEndpoint(queueName, e => { e.ConfigureConsumers(provider); }); })); }; }
private static void CreateConfigForAzureServiceBus(IServiceCollection services, IServiceCollectionBusConfigurator config, List <ConsumerAssemblyTypeModel> consumerAssemblyTypes) { config.AddBus(provider => Bus.Factory.CreateUsingAzureServiceBus(busFactoryConfig => { var connectionString = services.GetValue <string>("AzureServiceBusConnectionString"); busFactoryConfig.Host(connectionString); consumerAssemblyTypes .GroupBy(assembly => assembly.MessageType) .Select(assemblyGroup => new { MessageType = assemblyGroup.Key, ConsumerTypes = assemblyGroup.Select(assembly => assembly.ConsumerType).ToList() }) .ToList() .ForEach(assembly => { busFactoryConfig.GetType() .GetMethod(nameof(busFactoryConfig.SubscriptionEndpoint), 1, new Type[] { typeof(string), typeof(Action <IServiceBusSubscriptionEndpointConfigurator>) }) .MakeGenericMethod(assembly.MessageType) .Invoke(busFactoryConfig, new object[] { assembly.MessageType.Name, new Action <IServiceBusSubscriptionEndpointConfigurator>(consumerConfig => { var registerConsumerMethod = typeof(DependencyInjectionReceiveEndpointExtensions) .GetMethods() .Where(m => m.IsGenericMethod && m.GetGenericArguments().Length == 1) .First(); assembly.ConsumerTypes.ForEach(consumerType => { registerConsumerMethod.MakeGenericMethod(consumerType) .Invoke(null, new object[] { consumerConfig, null }); }); }) }); }); })); }
// TODO: Provide configuration for handle RabbitMq Host/Username/Password private static void CreateConfigForRabbitMq(IServiceCollection services, IServiceCollectionBusConfigurator configurator, List <ConsumerAssemblyTypeModel> consumerAssemblyTypes) { var serviceConfigModel = services.GetOptions <ServiceConfigurationModel>("Service"); configurator.AddBus(provider => Bus.Factory.CreateUsingRabbitMq(busFactoryConfig => { busFactoryConfig.Host("workflowmanager.rabbitmq", "/", h => { h.Username("guest"); h.Password("guest"); }); var serviceConfigModel = services.GetOptions <ServiceConfigurationModel>("Service"); consumerAssemblyTypes.ForEach(assemblyType => { busFactoryConfig.ReceiveEndpoint($"{serviceConfigModel.Name}_{assemblyType.MessageType.Name}", cfg => { cfg.Consumer(assemblyType.ConsumerType, (Type type) => provider.GetService(type)); }); }); })); }
private static void ConfigureServices(IServiceCollectionBusConfigurator services) { services.AddConsumer <ExecuteReportConsumer>(); services.AddBus(CreateBus); }