public HybridMessageBus(MessageBusSettings settings, HybridMessageBusSettings providerSettings) { Settings = settings ?? throw new ArgumentNullException(nameof(settings)); ProviderSettings = providerSettings ?? throw new ArgumentNullException(nameof(providerSettings)); // Use the configured logger factory, if not provided try to resolve from DI, if also not available supress logging using the NullLoggerFactory LoggerFactory = settings.LoggerFactory ?? (ILoggerFactory)settings.DependencyResolver?.Resolve(typeof(ILoggerFactory)) ?? NullLoggerFactory.Instance; _logger = LoggerFactory.CreateLogger <HybridMessageBus>(); _routeByMessageType = new Dictionary <Type, string>(); _busByName = new Dictionary <string, MessageBusBase>(providerSettings.Count); foreach (var name in providerSettings.Keys) { var builderFunc = providerSettings[name]; var bus = BuildBus(builderFunc); _busByName.Add(name, bus); BuildAutoRouting(name, bus); } // ToDo: defer start of busses until here }
public HybridMessageBus(MessageBusSettings settings, HybridMessageBusSettings providerSettings) { Settings = settings; ProviderSettings = providerSettings; _routeByMessageType = new Dictionary <Type, string>(); _busByName = new Dictionary <string, MessageBusBase>(providerSettings.Count); foreach (var name in providerSettings.Keys) { var builderFunc = providerSettings[name]; var bus = BuildBus(builderFunc); _busByName.Add(name, bus); BuildAutoRouting(name, bus); } // ToDo: defer start of busses until here }
public IMessageBus CreateMessageBus(IServiceProvider svp) { var hybridBusSettings = new HybridMessageBusSettings { // Bus 1 ["Memory"] = builder => { builder .Produce <CustomerEmailChangedEvent>(x => x.DefaultTopic(x.Settings.MessageType.Name)) .Consume <CustomerEmailChangedEvent>(x => x.Topic(x.MessageType.Name).WithConsumer <CustomerChangedEventHandler>()) .WithProviderMemory(new MemoryMessageBusSettings { EnableMessageSerialization = false }); }, // Bus 2 ["AzureSB"] = builder => { var serviceBusConnectionString = Secrets.Service.PopulateSecrets(Configuration["Azure:ServiceBus"]); builder .Produce <SendEmailCommand>(x => x.DefaultQueue("test-ping-queue")) .Consume <SendEmailCommand>(x => x.Queue("test-ping-queue").WithConsumer <SmtpEmailService>()) .WithProviderServiceBus(new ServiceBusMessageBusSettings(serviceBusConnectionString)); } }; var mbb = MessageBusBuilder.Create() .WithDependencyResolver(new LookupDependencyResolver(svp.GetRequiredService)) // DI setup will be shared .WithSerializer(new JsonMessageSerializer()) // serialization setup will be shared between bus 1 and 2 .WithProviderHybrid(hybridBusSettings); // In summary: // - The CustomerChangedEvent messages will be going through the SMB Memory provider. // - The SendEmailCommand messages will be going through the SMB Azure Service Bus provider. // - Each of the bus providers will serialize messages using JSON and use the same DI to resolve consumers/handlers. var mb = mbb.Build(); return(mb); }
public static MessageBusBuilder WithProviderHybrid(this MessageBusBuilder mbb, HybridMessageBusSettings hybridSettings) { return(mbb.WithProvider(settings => new HybridMessageBus(settings, hybridSettings))); }