Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        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);
        }