/// <summary> /// Use RabbitMQ as Pub/Sub system. /// </summary> /// <param name="bootstrapper">Bootstrapper instance to configure</param> /// <returns>Configured bootstrapper instance</returns> public static Bootstrapper UseRabbitMQ( this Bootstrapper bootstrapper, RabbitConnectionInfos connectionInfos, RabbitNetworkInfos networkInfos, Action <RabbitSubscriberConfiguration>?subscriberConfiguration = null, Action <RabbitPublisherConfiguration>?publisherConfiguration = null) { var subscriberConf = new RabbitSubscriberConfiguration(connectionInfos, networkInfos); subscriberConfiguration?.Invoke(subscriberConf); var publisherConf = new RabbitPublisherConfiguration(connectionInfos, networkInfos); publisherConfiguration?.Invoke(publisherConf); var service = new RabbitMQBootstrappService(ctx => { if (ctx.IsServiceRegistered(BootstrapperServiceType.IoC)) { bootstrapper.AddIoCRegistration(new InstanceTypeRegistration(subscriberConf, typeof(RabbitSubscriberConfiguration))); bootstrapper.AddIoCRegistration(new InstanceTypeRegistration(publisherConf, typeof(RabbitPublisherConfiguration))); bootstrapper.AddIoCRegistration(new TypeRegistration(typeof(RabbitPublisher), true)); bootstrapper.AddIoCRegistration(new TypeRegistration(typeof(RabbitSubscriber), true)); if (publisherConf.RoutingKeyFactory != null) { bootstrapper.AddIoCRegistration(new InstanceTypeRegistration(publisherConf.RoutingKeyFactory, typeof(IRoutingKeyFactory))); } } }); bootstrapper.AddService(service); bootstrapper.OnPostBootstrapping += (c) => { ILoggerFactory?loggerFactory = null; IScopeFactory? scopeFactory = null; if (c.Scope != null) { loggerFactory = c.Scope.Resolve <ILoggerFactory>(); scopeFactory = c.Scope.Resolve <IScopeFactory>(); } if (loggerFactory == null) { loggerFactory = new LoggerFactory(); loggerFactory.AddProvider(new DebugLoggerProvider()); } RabbitMQContext.RabbitSubscriber = new RabbitSubscriber( loggerFactory, subscriberConf, scopeFactory); RabbitMQContext.RabbitSubscriber.Start(); }; return(bootstrapper); }
public static Bootstrapper UseRabbitMQClientBus(this Bootstrapper bootstrapper, RabbitPublisherBusConfiguration?configuration = null) { var service = new RabbitMQBootstrappService(ctx => { RabbitMQContext.Configuration = configuration ?? RabbitPublisherBusConfiguration.Default; if (ctx.IsServiceRegistered(BootstrapperServiceType.IoC)) { bootstrapper.AddIoCRegistrations( new TypeRegistration(typeof(RabbitMQEventBus), typeof(IDomainEventBus)), new InstanceTypeRegistration(configuration ?? RabbitPublisherBusConfiguration.Default, typeof(RabbitPublisherBusConfiguration), typeof(AbstractBaseConfiguration))); RegisterRabbitClientWithinContainer(bootstrapper); } }); if (!bootstrapper.RegisteredServices.Any(s => s == service)) { bootstrapper.AddService(service); } return(bootstrapper); }